我有一个字符串,@mainString = 'CATCH ME IF YOU CAN'
。我想检查单词ME
是否在@mainString
中。
如何在SQL中检查一个字符串是否包含特定的子字符串?
我有一个字符串,@mainString = 'CATCH ME IF YOU CAN'
。我想检查单词ME
是否在@mainString
中。
如何在SQL中检查一个字符串是否包含特定的子字符串?
CHARINDEX()
函数用于在较长的字符串中查找一个子字符串,并返回匹配的位置,如果没有找到则返回0。
if CHARINDEX('ME',@mainString) > 0
begin
--do something
end
编辑或者根据 Daniel 的回答,如果你想要查找一个单词(而不是单词的子组件),那么你的CHARINDEX
调用应该像这样:
CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')
(对于可能出现的任何其他标点符号,添加更多递归的 REPLACE() 调用)
您可以在谓词中(在IF、WHERE或ON之后)使用通配符:
@mainstring LIKE '%' + @substring + '%'
或者在这个特定的情况下
' ' + @mainstring + ' ' LIKE '% ME[., ]%'
如果您要查找整个单词,请在引用字符串中放置空格;如果ME可以是更长单词的一部分,则可以省略空格。
nvarchar
,请不要忘记在所有字符串常量前加上 N
前缀,否则会导致每行转换。 - Richard SzalayLIKE
操作符支持正则表达式,但是 LIKE
操作符本身并不是正则表达式(参见 https://dev59.com/5Gox5IYBdhLWcg3w3X5S#9076427);该技术在搜索 '% ME[., ]%'
时使用通配符字符作为字面量(参见 https://learn.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15#using-wildcard-characters-as-literals),其中 [., ]
部分是通配符字符组,用于检查单词 "ME" 后面是否有可选的句号、逗号或空格。谢谢! - Nate Anderson
select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')
和select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home')
。(在排序规则中,CS
表示区分大小写,我相信您可以理解CI
的含义)。 - Damien_The_Unbeliever