Условие
Нужно выбрать коды товаров, у которых третья буква — X (например, ABX12, 12X45).
- A)
LIKE '_ _ _X%' - B)
LIKE '_ _X%' - C)
LIKE 'X%' - D)
LIKE '%X'
Решение
Правильный ответ: B.
В SQL-шаблонах LIKE:
_(подчёркивание) — ровно один любой символ.%— любая последовательность символов (0 и более).
Чтобы третий символ строки был X, нужно «зафиксировать» позицию: первые два символа любые (__), затем X, дальше что угодно (%).
шаблон: __X%
позиция: 1 2 3 4...
^ ^ ^
any any X any-tail
Разбор вариантов
- A
___X%— три любых символа, потомX. Это «четвёртая буква = X» (например,ABCX...). Не подходит. - B
__X%— два любых символа, потомX, потом что угодно. Это правильно — третья буква = X. - C
X%— строка начинается сX. Это «первая буква = X». - D
%X— строка заканчивается наX. Это «последняя буква = X».
Проверка
SELECT 'ABX12' LIKE '__X%'; -- TRUE
SELECT '12X45' LIKE '__X%'; -- TRUE
SELECT 'ABCX1' LIKE '__X%'; -- FALSE (X на 4-й позиции)
SELECT 'X1234' LIKE '__X%'; -- FALSE (X на 1-й)Подводные камни
- Считать пробелы в шаблоне частью паттерна. В оригинале вопроса
'_ _ _X%'иногда пишут с пробелами — но в SQL пробел в шаблоне — это пробел в строке. Здесь пробелы — просто визуальное разделение, реальный шаблон без них. - Регистр.
LIKE 'x%'в PostgreSQL чувствителен к регистру —'X1' LIKE 'x%'вернётFALSE. ИспользуйтеILIKEилиLOWER(). - Экранирование. Если ищете букву
_или%— пишитеLIKE 'a\_b' ESCAPE '\'.
Эталонный ответ
B) LIKE '__X%' — два любых символа + X + хвост.