我在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不同?
答案 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