我有一些數據,看起來像這樣:SQL獲取文本
20170101 - Wal-Mart #111-1234-5687789-MC000555555
20170101 - Target -1235-56444878 - MC000555555
我想使用一個SQL查詢來獲取第二最後和第3最後一個破折號之間的字符串,所以結果會是。
1234
1235
這怎麼實現?由於商店名稱可能有破折號,因此從頭開始計算破折號是不可靠的,除非有某種我不知道的技巧。
謝謝。
我有一些數據,看起來像這樣:SQL獲取文本
20170101 - Wal-Mart #111-1234-5687789-MC000555555
20170101 - Target -1235-56444878 - MC000555555
我想使用一個SQL查詢來獲取第二最後和第3最後一個破折號之間的字符串,所以結果會是。
1234
1235
這怎麼實現?由於商店名稱可能有破折號,因此從頭開始計算破折號是不可靠的,除非有某種我不知道的技巧。
謝謝。
我不知道除非你算破折號,否則你會如何處理這個問題。既然你不能從字符串的開頭開始計數(因爲商店的名字),也許你可以從最後算起。所以下面的組合應該做的事情你:
希望這有助於歡呼聲。
create table test (data varchar(100)); insert into test values ('20170101 - Wal-Mart #111-1234-5687789-MC000555555'), ('20170101 - Target -1235-56444878 - MC000555555'); WITH Rev As ( SELECT REVERSE(data) data FROM test ) , Pos AS ( SELECT data, CHARINDEX('-', data, CHARINDEX('-', data, 0) + 1) + 1 AS PIni, CHARINDEX('-', data, CHARINDEX('-', data, CHARINDEX('-', data, 0)+1)+1) AS PFin FROM Rev ) SELECT REVERSE(SUBSTRING(data, PIni, PFin - PIni)) FROM Pos; GO
| (No column name) | | :--------------- | | 1234 | | 1235 |
dbfiddle here
可以嵌套一個SUBSTRING_INDEX()
內另一個,就像這樣:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data,'-',-3),'-',1) FROM `test`
這將轉最後三個「部分」,然後從中提取第一個「部分」。
哪個數據庫? SQL服務器? MySQL的?甲骨文?或者你想要一個ansi-sql解決方案? – Dekel
第一個樣本是在第三個和第四個之間 – McNets
@McNets第二** **最後**和第三** **最後**短跑是OP正在尋找的東西。 – LIvanov