SQL Like与C#包含差异

时间:2019-07-04 12:05:54

标签: c# sql sql-server dapper

我在C#中使用以下SQL,

var str= QueryExecutor.Query<string>("SELECT SomeColumn from Somtable WHERE SomeColumn LIKE '%abc_def%'", new { }, CommandType.Text).FirstOrDefault();
            if (str.Contains("abc_def"))
            {

            }

现在我得到了大字符串,但是str.Contains("abc_def")返回false。该列为NVARCHAR(MAX)。为什么包含和LIKE不同?

1 个答案:

答案 0 :(得分:4)

您可能会忘记_是SQL LIKE的通配符,它​​完全匹配一个字符。

因此,LIKE '%abc_def%'可以在两者之间匹配任何字符:

abc1def
abcZdef
abc&def
abc_def

要使用LIKE匹配SQL Server中的下划线,可以使用以下选项之一:

SomeColumn LIKE '%abc[_]def%'             -- use a character class
SomeColumn LIKE '%abc$_def%' ESCAPE '$'   -- use an escape character

或者,您可以使用charindex()

CHARINDEX('abc_def', SomeColumn) > 0