You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:32:24