首页 > 解决方案 > SQL 子字符串 charindex

问题描述

我有一个带有这样的字符串的 SQL 字段

27/08/2018 至 31/08/2018 - GCH/10561/ 201312361J /HO
04/09/2018 至 07/09/2018 - GCH/2836/202788279H/WAL

这个字符串有一个我需要提取的参考代码。上面加粗的那个。

问题是它之前的字符串并不总是相同的长度。请参见上面的第二个示例。

如何每次都提取该代码?

我试过这个,但我需要在最后一个“/”的左边.....

SELECT Right('27/08/2018 to 31/08/2018 - GCH/10561/201312361J/HO', CHARINDEX('/','27/08/2018 to 31/08/2018 - GCH/10561/201312361J/HO')-1)

我想我需要使用 asubstringcharindex不能让它工作。

在此先感谢您的帮助。

标签: sqlsubstringcharindex

解决方案


这是假设 MS SQL Server:

declare @rev varchar(64)
set @rev=reverse('27/08/2018 to 31/08/2018 - GCH/10561/201312361J/HO')
SELECT 
reverse(SUBSTRING ( @rev,  charindex('/', @rev) + 1, charindex('/', substring(@rev, (charindex('/', @rev) + 1) + 1, Len(@rev)))));

解释:

  • 首先,我们使用 reverse 反转原始字符串。
  • 然后我们找到第一次出现 '/' 和下一次出现 '/' 之间的子串
  • 我们再次反转字符串以找到我们的原始字符串。

推荐阅读