我有一些看起来像这样的数据:
20170101 - Wal-Mart #111-1234-5687789-MC000555555
20170101 - Target -1235-56444878 - MC000555555
我想使用SQL查询来获取第二个最后一个和第三个破折号之间的字符串,因此结果将是。
1234
1235
如何实现这一目标?由于商店的名称可以有破折号,从头开始计算破折号是不可靠的,除非有一些我不知道的技巧。
感谢。
答案 0 :(得分:1)
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
答案 1 :(得分:0)
我不确定你会怎么做到这一点,除非你计算破折号。由于您无法从字符串的开头开始计数(因为商店的名称),也许您可以从最后开始计算。因此,以下各项的组合应该适合您:
希望这会有所帮助,欢呼。
答案 2 :(得分:0)
您可以将一个SUBSTRING_INDEX()
嵌套在另一个中,如下所示:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data,'-',-3),'-',1) FROM `test`
这将提取最后三个“部分”,然后从中提取第一个“部分”。