获取第 3 和第 5 个空格之间的字符串 [closed]

Get string between 3rd and 5th space [closed]

提问人:Rae Christian Meron 提问时间:8/23/2023 最后编辑:jarlhRae Christian Meron 更新时间:8/23/2023 访问量:69

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

3个月前关闭。

我正在尝试提取值的第 3 个和第 5 个空格之间的字符串。例如,如果字符串为:

1588 Exeter Rd, Lebanon, CT 06249, United States

我想提取的是:

Lebanon, CT

我一直在摆弄我在网上找到的一些解决方案,但看起来我错过了一些东西。例如,对于以下查询:

SUBSTRING([@field:GPS], (CHARINDEX(' ', [@field:GPS], 
CHARINDEX(' ', [@field:GPS], 
CHARINDEX(' ',[@field:GPS])
+1 )+1)+1), 


CHARINDEX(' ', [@field:GPS], 
CHARINDEX(' ', [@field:GPS], 
CHARINDEX(' ', [@field:GPS], 
CHARINDEX(' ', [@field:GPS], 
CHARINDEX(' ',[@field:GPS])+1 )+1 )+1 )+1)+1)

它返回:Lebanon, CT 06249, United Sta

SQL 子字符串 charindex

评论

3赞 Isolated 8/23/2023
这只是练习吗?这种逻辑(第 3 到第 5 个空间)不适用于许多城市或街道地址。
0赞 jarlh 8/23/2023
您使用的是哪些 dbms?上面的代码片段在几个方面是特定于产品的。

答:

-3赞 Joaquin 8/23/2023 #1

查询几乎是正确的,但似乎提取了太多的字符串。您需要计算要提取的子字符串的长度,而不仅仅是找到第 5 个空格的位置。

下面是一个可能有效的修改后的查询:

SUBSTRING([@field:GPS], 
  CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS]) + 1) + 1) + 1,
  CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS]) + 1) + 1) + 1) + 1) -
  CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS], CHARINDEX(' ', [@field:GPS]) + 1) + 1) - 1
)

此查询通过从第 5 个空格的位置中减去第 3 个空格的位置,然后再减去一个以排除空格本身来计算子字符串的长度。