Разница между _% _% и __% в 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.