В предыдущих примерах для поиска необходимого текста мы использовали оператор =. SQL также позволяет искать фрагменты текстовой строки с помощью оператора LIKE. Это особенно полезно, когда мы не знаем, как именно было записано в базе данных текстовое значение. Кроме того, бывают случаи, когда текстовое значение было написано с ошибками. Если понадобится найти все счета, выставленные в городах, название которых начинается с буквы
Оператор LIKE использует подстановочные знаки, представленные символом % (символ процента). То, что следует за знаком =, это единственное значение, которое вы увидите в своем наборе результатов. С помощью оператора LIKE и подстановочного знака вы можете определить варианты ввода.
Примечание
Подстановочные знаки всегда заключаются в одинарные кавычки. Не заключенный в кавычки символ % — это просто арифметический оператор (показан ранее в этой главе в таблице операторов). Текстовый поиск не чувствителен к регистру. При использовании в запросе строчной или заглавной буквы результаты будут одинаковы.
С помощью подстановочного знака можно задать любое количество символов любого типа. Как показано в примере ниже, запрос ищет любые счета, выставленные в городах на букву
SELECT
InvoiceDate,
BillingAddress,
BillingCity,
Total
FROM
invoices
WHERE
BillingCity LIKE 'T%'
ORDER BY
Total
Рис. 50
Добавление еще одного символа % перед буквой
SELECT
InvoiceDate,
BillingAddress,
BillingCity,
Total
FROM
invoices
WHERE
BillingCity LIKE '%T%'
ORDER BY
Total
Рис. 51
Примечание
Разумеется, при этом в результатах появятся и города, названия которых начинаются или заканчиваются строчной буквой t. Символ % может представлять любую букву (буквы), включая строчную t.
Оператор LIKE также используется для исключения результатов, соответствующих указанным параметрам. Для этого необходимо поставить ключевое слово NOT перед оператором LIKE, и вы сможете исключить записи из результата запроса.
SELECT
InvoiceDate,
BillingAddress,
BillingCity,
Total
FROM
invoices
WHERE
BillingCity NOT LIKE '%T%'
ORDER BY
Total
Из примеров видно, что существует множество способов использования оператора с подстановочными знаками. Рассмотрим наиболее распространенные.
Рис. 52
Рис. 53
Примечание
Символ % можно интерпретировать как «что угодно». Например, когда вы указываете '%T%', вы имеете в виду: «Меня не беспокоит, какие символы содержатся в строке до или после буквы T (буква T при этом не первая и не последняя)».
Фильтрация записей по дате
Используя все знания как о числах, так и о тексте, вы сможете теперь выполнить поиск счета, выставленного в определенную дату. Рассмотрим следующий пример:
SELECT
InvoiceDate,
BillingAddress,
BillingCity,
Total
FROM
invoices
WHERE
InvoiceDate = '2009-01-03 00:00:00'
ORDER BY
Total
Рис. 54
Обратите внимание на способ написания даты. При указании даты в запросе важно сначала проанализировать, каким образом дата хранится в запрашиваемой таблице. Как вы знаете из главы 1, для этого надо перейти на вкладку Browse Data (Просмотр данных), выбрать таблицу invoices и проанализировать формат, в котором столбец InvoiceDate хранит даты. В нашей базе данных даты хранятся в формате гггг-мм-дд 00:00:00. Затем перейдите на вкладку Database Structure (Структура базы данных) и проанализируйте поле InvoiceDate таблицы invoices. Вы видите, что в столбце Type даты имеют тип данных DATETIME.
В условии WHERE дата, как и текст, заключена в одинарные кавычки. При работе с датами используйте те же операторы, что и при работе с числами: =, >, <, BETWEEN и т. д.
Практические задания
• Получите все счета, выставленные в период с 1 января 2009 г. по 31 декабря 2009 г.
• Найдите 10 самых крупных счетов, полученных после 5 июля 2009 г.
Функция DATE()
При работе с датами в SQL можно использовать ряд функций, которые помогают получать более точные результаты. Из предыдущего примера видно, что столбец InvoiceDate таблицы invoices имеет тип данных DATETIME. Поэтому, когда мы указывали значение даты в услови WHERE, мы включали время (2009-01-03 00:00:00). Функция DATE()позволяет исключить время при указании параметров даты.
SELECT
InvoiceDate,
BillingAddress,
BillingCity,
Total
FROM
Invoices
WHERE
DATE(InvoiceDate) = '2009-01-03'
ORDER BY
Total
Рис. 55
Результат этого запроса идентичен результату предыдущего запроса. Однако использование функции DATE() позволяет получить результат быстрее, когда параметры времени либо отсутствуют, либо не актуальны.
Примечание
В SQL доступно множество функций. Функция DATE () особенно полезна при использовании условия WHERE для сортировки записей по дате. В главе 7 мы более подробно рассмотрим другие функции.
Использование операторов AND и OR с двумя отдельными полями