iT邦幫忙

0

SQL分析字串開頭

  • 分享至 

  • xImage

各位前輩好,目前我要分析表內的地區
必須根據地區的表的內容分析出住址的區域
原本想到的作法是取開頭來做比對
但遇到的問題是,需要分析的資料的開頭長度不一致

想請問一下是否有函數能夠帶出最符合的選項,或是有別的方法能夠分析出資料

地區資料:
台北
台北中正區
台北大安區
台南
名古屋
溫哥華
摩洛哥
布魯克林

原始資料:
台北OOXXXX
台南XXOOOOO
布魯克林OOOOO
名古屋OOO
溫哥華XXX
摩洛哥XXXX

希望的資料格式:
台北OOXXXX,台北
台北中正區XXX,台北中正區
台北大安區OOO,台北大安區
台南XXOOOOO,台南
布魯克林OOOO,布魯克林
名古屋OOOOO,名古屋
溫哥華XXXXX,溫哥華
摩洛哥XXXXX,摩洛哥

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
純真的人
iT邦大師 1 級 ‧ 2022-11-16 17:41:59

恩?

select 原始資料
,地區資料
from (
  select 原始資料
  ,地區資料
  ,Row_Number()over(partition by 原始資料 order by len(地區資料) desc) Sort
  from 原始資料表
  left join 地區資料表 on 原始資料 like '%' + 地區資料 + '%'
) k
where Sort = 1
johncoc iT邦新手 3 級 ‧ 2022-11-16 18:01:35 檢舉

台北中正區XXX會有2筆資料
台北中正區XXX,台北
台北中正區XXX,台北中正區

johncoc iT邦新手 3 級 ‧ 2022-11-16 18:07:16 檢舉

還要加個多筆同地址取地區字串最長的那筆

johncoc
的確~加個Row_Number()over(partition by 判斷~排序就可以了~

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-15 10:05:43

地區資料表:

CREATE TABLE Regions (
  RegionName VARCHAR(50)
);

INSERT INTO Regions (RegionName) VALUES ('台北');
INSERT INTO Regions (RegionName) VALUES ('台北中正區');
INSERT INTO Regions (RegionName) VALUES ('台北大安區');
INSERT INTO Regions (RegionName) VALUES ('台南');
INSERT INTO Regions (RegionName) VALUES ('名古屋');
INSERT INTO Regions (RegionName) VALUES ('溫哥華');
INSERT INTO Regions (RegionName) VALUES ('摩洛哥');
INSERT INTO Regions (RegionName) VALUES ('布魯克林');

原始資料表:

CREATE TABLE Addresses (
  Address VARCHAR(100)
);

INSERT INTO Addresses (Address) VALUES ('台北OOXXXX');
INSERT INTO Addresses (Address) VALUES ('台南XXOOOOO');
INSERT INTO Addresses (Address) VALUES ('布魯克林OOOOO');
INSERT INTO Addresses (Address) VALUES ('名古屋OOO');
INSERT INTO Addresses (Address) VALUES ('溫哥華XXX');
INSERT INTO Addresses (Address) VALUES ('摩洛哥XXXX');

SQL 查詢

SELECT a.Address, r.RegionName
FROM Addresses a
JOIN Regions r ON a.Address LIKE CONCAT(r.RegionName, '%');

結果:

Address         RegionName
--------------- ----------------
台北OOXXXX       台北
台南XXOOOOO      台南
布魯克林OOOOO    布魯克林
名古屋OOO         名古屋
溫哥華XXX         溫哥華
摩洛哥XXXX       摩洛哥

我要發表回答

立即登入回答