使用存储过程检查一个string是否包含SQL Server 2005中的子string

我有一个string, @mainString = 'CATCH ME IF YOU CAN' 。 我想检查单词ME是否在@mainString

如何检查一个string是否在SQL中有特定的子string?

CHARINDEX ()在较大的string内search子string,并返回匹配的位置,如果不匹配,则返回0

 if CHARINDEX('ME',@mainString) > 0 begin --do something end 

编辑或从丹尼尔回答,如果你想find一个单词(而不是单词的子部分),你的CHARINDEX调用将如下所示:

 CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ') 

(为可能发生的任何其他标点符号添加更多的recursionREPLACE()调用

您可以在谓词中使用通配符(在IF,WHERE或ON之后):

 @mainstring LIKE '%' + @substring + '%' 

或者在这个特定的情况下

 ' ' + @mainstring + ' ' LIKE '% ME[., ]%' 

(如果你正在寻找整个单词,把空格放在引用的string中,或​​者如果我可以成为一个更大的单词的一部分,就把它们放在外面)。

 DECLARE @str VARCHAR(255) SET @str = 'this is @n $tring' IF (@str LIKE '%[^a-zA-Z0-9]%') PRINT 'have some ''special'' characters' ELSE PRINT 'have not ''special'' characters' 

可能这会帮助你。

你不会说哪种SQL(即;哪个数据库)的味道,但在Oracle中你可以使用instr(),并且在SQL Server中可以使用SUBSTRING()