|
Программирование >> Программный интерфейс приложений
mysql> SELECT last naime, first naime, death ->FROM president; ->WHERE death >= 1970-01-01 and death < 1980-01-01 ;
Для выборки по фрагменту даты также можно воспользоваться функциями year {), month (), dayofmonth (). Например, так можно сделать выборку всех президентов, которые родились в один и тот же месяц, что и автор этой книги (март). Для этого произведем выборку всех записей с датами рождения, в которых значится третий месяц. mysql> SELECT last name, first name, birth ->FROM president WHERE MONTH(birth) = 3; -+-+ I last name I Madison I Jackson I Tyler I Cleveland first name James Andrew John Grover birth 1751-03-16 1767-03-15 1790-03-29 1837-03-18 Запрос может также содержать название месяца. mysql> SELECT last name, first name, birth ->FROM president WHERE MONTHNAME (birth) march ;
Усложним запрос и сделаем выборку президентов, день рождения которых полностью совпадает с днем рождения автора. mysql> SELECT last name, first name, birth ->FROM president WHERE MONTHNAME(birth) = march AND DAYOFMONTH (BIRTH) = 29;
Результат этого запроса напоминает список Люди, родившиеся сегодня из раздела Развлечения вашей любимой газеты. Для выборки президентов, родившихся сегодня, необходимо сравнить их дни рождения со значением current date (текущей даты). SELECT last name, first name, birth FROM president WHERE MONTH(birth) = MONTH(CURRENT DftTE) AND DftYOFMONTH(BIRTH) = DAYOFMONTH(CURRENT DftTE) Для получения интервала между датами их можно вычитать одну из другой. Например, для выяснения того, кто из президентов жил дольше всех, необходимо из даты смерти вычесть дату рождения. Для этого с помошью функции TO DAYS О преобразуем значения death и birth, произведем вычитание и разделим полученный результат на 365. Получим приблизительный возраст в годах. mysql> SELECT last name, first name, birth, death ->FLOOR((TO DAyS(death) - TO DAyS(birth))/365) AS age ->FRaM president WHERE death IS NOT NULL ->ORDER BY age DESC LIMIT 5;
Функция FLOOR (), которой МЫ воспользовзлись в этом запросе, отсекает дробную часть от полученного числа лет. Получение разности между датами полезно также для определения, какой период времени разделяет эти две даты. С помошью подобных вычислений можно напоминать членам Исторической Лиги о необходимости обновить свое членство. Вычислите разность между датой истечения срока членства и текущей датой. Если она не превышает допустимого значения, скоро понадобится обновление. Вот запрос, делающий выборку членов, которые должны обновить членство в течение 60 дней. SELECT last name, first name, expiration FROM member WHERE (TO DAYS(expiration) - TO DAYS(CURRENT DATE)) < 60 Начиная с версии 3.22 для вычитания одной даты из другой можно использовать функции DATE ADD () и DATE SUB {). Эти функции по датс и интервалу возвращают новую дату, например: mysql> SELECT DATE ADD( 1970-1-1 , INTERVAL 10 YEAR); I DATE ADD( 1970-1-1 , INTERVAL 10 YEAR) I 1980-01-01 mysql> SELECT DATE SUB( 1970-1-1 , INTERVAL 10 YEAR); I DATE SUB( 1970-1-1 , INTERVAL 10 YEAR) I 1960-01-01 I Запрос, приведенный в этом разделе выше, делал выборку президентов, умерших в семидесятых годах этого столетия. Для задания даты окончания интервала использовались литералы. Перепишем этот запрос по-другому: укажем с помошью литерала начальную дату. mysql> SELECT last name, first name, death ->FROM president ->WHERE death >= 1970-1-1 ->AND death < DATE ADD( 1970-1-1 , INTERVAL 10 YEAR);
Запрос на обновление членства можно переписать с применением функции date add ( ) . SELECT last name, first name, expiration FROM member WHERE expiration < DATE ADD (CURRENT DATE, INTERVAL 60 DAY) Ранее в этой главе был представлен запрос для определения тех пациентов стоматолога, кто забыл пройти регулярный профилактический осмотр. SELECT last name, first name, last visit FROM patient WHERE last visit < DATE SUB(CURRENT DATE, INTERVAL 6 MONTH) Понятен ли этот запрос теперь? Соответствие шаблону СУБД MySQL позволяет производить выборку значений, которые соответствуют определенному шаблону. При этом не надо задавать определенное значение. Для выборки можно использовать специальные операторы (like и not like) и указать строку, содержащую символы-заменители. Символ соответствует значению любой одиночный символ . Символ % соответствует значению любая последовательность символов (включая и пустую последовательность). Шаблоны, удовлетворяющие like и not like, не чувствительны к регистру. Вот шаблон, соответствующий всем фамилиям, начинающимся с W или w . mysql> SELECT last name, first name FROM president ->WHERE last name LIKE W% last name Washington Wilson first name I -+ George I Woodrow I A это ошибочный шаблон;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |