SQL как против C # содержит разницу - PullRequest
0 голосов
/ 04 июля 2019

У меня следующий SQL в C #,

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 (Макс).Почему содержит и как отличается?

1 Ответ

4 голосов
/ 04 июля 2019

Возможно, вам не хватает того, что _ является подстановочным знаком для SQL LIKE, который соответствует ровно одному символу.

Таким образом, LIKE '%abc_def%' может соответствовать любому символу между двумя:

abc1def
abcZdef
abc&def
abc_def

Чтобы сопоставить подчеркивание в SQL Server с помощью LIKE, вы можете использовать одно из следующих:

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

Или вы можете использовать charindex():

CHARINDEX('abc_def', SomeColumn) > 0
...