SQL Server中如何获取字符串最后一个IN前的内容?
获取SQL Server字符串中最后一个“IN”之前的内容
我来帮你搞定这个问题!你之前的查询只能定位到第二个“IN”的位置,没法处理字符串里有多个“IN”或者只有一个“IN”的情况,而且没考虑大小写不敏感的匹配需求,所以才得不到预期结果。
核心思路
要找到最后一个“IN”的位置,我们可以用反转字符串的技巧:把原字符串反转后,找第一个“NI”(原“IN”反转后的结果)的位置,再通过原字符串的长度反推回原位置,这样就能精准定位最后一个“IN”的起始点,再截取前面的内容。
正确的SQL查询
SELECT SUBSTRING(Name, 1, LEN(Name) - CHARINDEX('NI', REVERSE(UPPER(Name))) - 1) AS Name FROM [dbo].[Stringposition]
逐行解释
REVERSE(UPPER(Name)):先把字符串转成大写再反转,这样不管原字符串里的“IN”是大写、小写还是混合(比如inGENTRINin),反转后都会变成“NI”,确保所有形式的“IN”都能被匹配到。CHARINDEX('NI', ...):找到反转后第一个“NI”的位置,这个位置对应原字符串中最后一个“IN”的结束位置。LEN(Name) - CHARINDEX(...) - 1:计算出原字符串中最后一个“IN”起始位置的前一位,这样SUBSTRING就能准确截取到最后一个“IN”之前的所有内容。
验证结果
执行这个查询后,会完美输出你想要的结果:
Name -------------- PN MAIN DOOR PN PASSAGE INTesting YEN inGENTRIN
可选:大小写严格匹配
如果你需要只匹配大写的“IN”,不识别小写的“in”,可以去掉UPPER函数,改成下面的查询:
SELECT SUBSTRING(Name, 1, LEN(Name) - CHARINDEX('NI', REVERSE(Name)) - 1) AS Name FROM [dbo].[Stringposition]
内容的提问来源于stack exchange,提问作者kopi
相关产品推荐
相关产品推荐

