150 Глава 7. Создание, преобразование и работа с данными
mysql>
SELECT EXTRACT(YEAR FROM '20050322 22:19:05'); ++
| EXTRACT(YEAR FROM '20050322 22:19:05') |
++
| 2005 |
++
1 row in set (0.02 sec)
В SQL Server нет реализации
extract()
, но есть функция
date
part()
(часть даты). Вот как можно извлечь год из значения
da
tetime
с помощью
datepart()
:
SELECT DATEPART(YEAR, GETDATE( ))
Временные функции, возвращающие числа Ранее в этой главе была представлена функция, используемая для до
бавления заданного интервала к значению даты и формирующая, та
ким образом, другую дату. Другая распространенная операция при ра
боте с датами – определение количества интервалов (дней, недель, лет)
между двумя датами. MySQL включает предназначенную для этого
функцию
datediff()
, которая возвращает количество полных дней ме
жду двумя датами. Например, чтобы узнать, сколько дней будут про
должаться школьные каникулы этим летом, можно сделать так:
mysql>
SELECT DATEDIFF('20050905', '20050622'); ++
| DATEDIFF('20050905', '20050622') |
++
| 75 |
++
1 row in set (0.00 sec)
Итак, до благополучного возвращения детей в школу мне предстоит
75дневная пытка ядовитым плющом, комариными укусами и разби
тыми коленками. Функция
datediff()
в своих аргументах не учитыва
ет время дня. Даже если включить время, задавая для первой даты од
ну секунду до полуночи и для второй даты одну секунду после полуно
чи, эти данные никак не отразятся на вычислениях:
mysql>
SELECT DATEDIFF('20050905 23:59:59', '20050622 00:00:01'); ++
| DATEDIFF('20050905 23:59:59', '20050622 00:00:01') |
++
| 75 |
++
1 row in set (0.00 sec)
Если переставить аргументы, поместив первой более раннюю дату,
datediff()
вернет отрицательное число:
mysql>