LIKE и ORDER BY: поиск по обрывку
Целая картотека, а улика на руках — обрывок наклейки и одна фраза свидетеля: «перед самым закрытием». Ни имени, ни точного часа. Прочесать всё глазами нельзя. Ищем по образцу, потом раскладываем по времени.
Обрывок — это ещё не имя. LIKE ищет по кусочку, знак % значит «что угодно вместо этого».
SELECT *
FROM receipts
WHERE item LIKE '%сапф%';Список сузился — почему этого мало?
Список сузился, но лежит вповалку. Раскладываем по времени — от последнего к первому: последним видели то, что случилось последним.
SELECT *
FROM receipts
WHERE item LIKE '%сапф%'
ORDER BY time DESC;| item | time |
|---|---|
| сапфировый кулон | 22:58 |
| сапфировый браслет | 21:40 |
| сапфировая брошь | 20:15 |
«Порядок — не украшение. Порядок — это разница между „последний“ и спором, кто был последним.»
Дальше — верхушка списка: LIMIT берёт первые строки уже упорядоченной очереди. Без ORDER BY впереди него это была бы не верхушка, а кто попался под руку — тот капкан разобран отдельным уроком.
Где в этом запросе прячется пропавший вечер?
Второй капкан — тише и злее. Окно времени берёт BETWEEN, а оно включает обе границы буквально.
WHERE time BETWEEN '1983-11-02' AND '1983-11-03'
-- граница '1983-11-03' = ровно полночь,
-- всё после неё в тот же день — мимоЕсли границы — календарные даты без часов, весь последний день после полуночи проваливается из выдачи. Полночь — не конец суток, а их начало. Полтора часа перед закрытием решают дело, а из отчёта их вымело незаметно.
WHERE time >= '1983-11-02'
AND time < '1983-11-04'
-- полуоткрытый интервал — ничего не теряет«Улика не пропадает из жизни. Она пропадает из вашего запроса — и вы не заметите недостачи, пока не пересчитаете сами.»
На работе так теряют «последний день квартала» в любом отчёте с BETWEEN по датам. Раскладка по образцу и по времени — второй инструмент после сита: она не находит виновного, она строит очередь, в которой видно, кто был последним.
Обрывок наклейки и час закрытия — так начинается почти каждое дело в архиве. Возьмите любое и разложите улики по порядку своими руками.