SQL获取倒数第二和倒数第三之间的文本

SQL获取倒数第二和倒数第三之间的文本,sql,substring,Sql,Substring,我有一些数据如下所示: 20170101 - Wal-Mart #111-1234-5687789-MC000555555 20170101 - Target -1235-56444878 - MC000555555 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data,'-',-3),'-',1) FROM `test` 我想使用SQL查询来获取最后2个破折号和最后3个破折号之间的字符串,因此结果将是 1234 1235 如何做到这一点?因为商店的名

我有一些数据如下所示:

20170101 - Wal-Mart #111-1234-5687789-MC000555555

20170101 - Target -1235-56444878 - MC000555555
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data,'-',-3),'-',1) FROM `test`
我想使用SQL查询来获取最后2个破折号和最后3个破折号之间的字符串,因此结果将是

1234

1235
如何做到这一点?因为商店的名称可能有破折号,所以从一开始就计算破折号是不可靠的,除非有什么我不知道的技巧


谢谢。

我不知道你还会怎么做,除非你数破折号。因为你不能从字符串的开头开始计数(因为商店的名称),也许你可以从末尾开始计数。因此,以下几点的结合应该对您有所帮助:

  • -反转字符串(以便您可以“从末尾开始计数”)
  • -获取给定字符串中给定字符的索引
  • -因此,一旦知道第二个和第三个最后破折号的位置,您就可以提取所需的数据
希望这有帮助,干杯

|(没有列名称)| | :--------------- | | 1234 | | 1235 |
dbfiddle

您可以将一个
子字符串\u INDEX()
嵌套在另一个中,如下所示:

20170101 - Wal-Mart #111-1234-5687789-MC000555555

20170101 - Target -1235-56444878 - MC000555555
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data,'-',-3),'-',1) FROM `test`

这将提取最后三个“部分”,然后从中提取第一个“部分”。

哪个数据库?sql server?mysql?神谕或者您想要一个ansi sql解决方案?第一个示例介于第三个和第三个之间4th@McNets倒数第二和倒数第三的破折号是OP想要的。@LIvanov我知道,但是看看
沃尔玛
它很接近,但是如果有额外的破折号,它会带来错误的文本。我会试着用REVERSE来蒙混过关,看看是否有办法让它工作,但这对我来说是SQL的一个新领域。我经常使用反向,但不管怎样都可以。不处理数百万行,因此如果效率低下,仍然可以。