У меня есть следующий 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). Почему содержит и НРАВИТСЯ различаются?





Вы, вероятно, упускаете из виду, что _ — это подстановочный знак для 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
Кроме того, SQL Server обычно настраивается с учетом регистра в.
@LasseVågsætherKarlsen Да. Затем они должны попасть в сопоставления: docs.microsoft.com/en-us/sql/t-sql/statements/…
Они отличаются, потому что они отличаются. У них нет одинаковых правил.
LIKEсоответствует настройке чувствительности к регистру для рассматриваемой базы данных и/или столбца, и у вас также есть подстановочный знак, подчеркивание.string.Containsиспользует точное соответствие.