如何判断一个VARCHAR变量是否包含一个子字符串?

72

我原以为应该用 CONTAINS,但这并没有起作用。

我想要做到这个效果:

IF CONTAINS(@stringVar, 'thisstring')
   ...

我必须运行一个select语句或另一个,这取决于变量是否包含一个字符串,但我无法弄清楚如何使其工作。所有我看到的示例都是在contains中使用列。

4个回答

103

标准的 SQL 方法是使用 like:

where @stringVar like '%thisstring%'

那是在查询语句中。 你也可以在 TSQL 中这样做:

if @stringVar like '%thisstring%'

1
这让我感到难过。我前几天尝试了那个,但它没有起作用。我可能打错了什么字,因为现在它却可以工作了。我认为这是因为在周五晚上和一个3天的周末之前做某些事情。我甚至可能把整个语句都倒过来了。谢谢! - Yatrix
3
你可以使用 charindex('thisstring', @stringVar) 进行检索,如果 like 函数似乎无法正常工作。 - Gordon Linoff
@Asad...当然这会起作用。通配符“%”匹配零个或多个字符。 - Gordon Linoff

29

除了像其他评论者建议的那样使用LIKE之外,你还可以使用CHARINDEX

declare @full varchar(100) = 'abcdefg'
declare @find varchar(100) = 'cde'
if (charindex(@find, @full) > 0)
    print 'exists'

如果你正在寻找 LIKE 语句使用的通配符之一,那么这就是完美的。 - Jrud

7
    IF CHARINDEX('TextToSearch',@TextWhereISearch, 0) > 0 => TEXT EXISTS

    IF PATINDEX('TextToSearch', @TextWhereISearch) > 0 => TEXT EXISTS

    Additionally we can also use LIKE but I usually don't use LIKE.

7

CONTAINS是用于全文索引字段的 - 如果不是,请使用LIKE


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接