Разница между _% _% и __% в sql-сервере
Я изучаю основы SQL через W3School и во время понимания основ wildcards Я рассмотрел следующий запрос:
--Finds any values that start with "a" and are at least 3 characters in length
WHERE CustomerName LIKE 'a_%_%'
как в примере, следующий запрос будет искать в таблице, где столбец CustomerName
начинается с 'a' и имеет длину не менее 3 символов.
Однако я также пробую следующий запрос:
WHERE CustomerName LIKE 'a__%'
Этот запрос также дает мне тот же результат.
Я хочу знать, есть ли разница в обоих запросах? Получает ли второй запрос другой результат в каком-то конкретном сценарии? Если да, то какой будет этот сценарий?
Ответы
Ответ 1
Оба начинаются с A
и заканчиваются на %
. В средней части первая говорит "один char, затем между нулем и многими символами, затем один char", а второй - "один char, затем один char".
Учитывая, что часть, которая приходит после них (заключительная часть), равна %
, что означает "между нулем и многими символами", я могу видеть только оба предложения как идентичные, поскольку они по существу просто хотят, чтобы строка, начинающаяся с A
затем по крайней мере два следующих символа. Возможно, если бы были какие-то ограничения на то, какие символы были разрешены _
, возможно, они могли быть разными.
Если бы мне пришлось выбирать, я бы пошел со вторым, чтобы быть более интуитивным. В конце концов, многие другие маски (например, a%%%%%%_%%_%%%%%
) дадут тот же эффект, но почему странная сложность?
Ответ 2
Для оператора "Like" одно подчеркивание "_" означает любой символ, поэтому, если вы помещаете одно подчеркивание, например
ColumnName LIKE 'a_%'
вы в основном говорите, что вам нужна строка, где первая буква "а", а затем еще один символ, а затем ничего или ничего.
ColumnName LIKE 'a__%'
ИЛИ ColumnName LIKE 'a_%_%'
Оба выражения означают первую букву "а", затем следуют два символа, а затем следует что-либо или ничего. Или на простом английском языке любая строка с 3 или более символами, начинающаяся с a
.