使用存储过程检查一个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()