Почему оператор T-SQL «LIKE» не оценивает это выражение так, как я думаю?

Я пытаюсь отловить ошибку имени переменной T-SQL, убедившись, что значение переменной предваряется скобкой "[" .

Вот пример того, как я пытаюсь это сделать:

DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(@thing NOT LIKE '[' + '%') --If the value does not start with [ then add it
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing

Пример выше PRINT [[55555

Обратите внимание, что исходное значение @thing было предварено скобкой "[". Я ожидал, что условие IF вернет false, так как «[55555» LIKE '[' + '%'

Почему условие IF не возвращает false? И, что более важно, я полагаю, каков правильный синтаксис для проверки существования строки, которая встречается в начале значения переменной строки?

EDIT Похоже, что в скобке "[" есть что-то особенное. Когда я запускаю LIKE в скобке, он не делает того, что я ожидаю, но когда я не использую скобку, LIKE работает так, как я ожидал.

Посмотрите эти примеры:

IF('[' NOT LIKE '[')
BEGIN
PRINT '[ is NOT LIKE ['
END
ELSE
BEGIN
PRINT '[ is LIKE ['
END

IF('StackO' NOT LIKE 'StackO')
BEGIN
PRINT 'STACKO is NOT LIKE StackO'
END
ELSE
BEGIN
PRINT 'STACKO is LIKE StackO'
END

Вот результат двух условия:

[НЕ НРАВИТСЯ [

STACKO КАК StackO

6
задан Peter Mortensen 29 March 2017 в 16:28
поделиться