Читайте также:
|
|
Многие встроенные временные функции принимают в качестве аргу_ мента одну дату и возвращают другую. Например, функция MySQL date_add() позволяет добавить любой интервал (т. е. дни, месяцы, года) к заданной дате, чтобы получить другую дату. Вот пример, демонстри_ рующий, как добавить к текущей дате пять дней:
mysql> SELECT DATE_ADD(CURRENT_DATE(), INTERVAL 5 DAY);
+__________________________________________+
| DATE_ADD(CURRENT_DATE(), INTERVAL 5 DAY) |
+__________________________________________+
| 2005_03_26 |
+__________________________________________+
1 row in set (0.00 sec)
Второй аргумент заключает в себе три элемента: ключевое слово interval (интервал), требуемое количество и тип интервала. В табл. 7.5 приве_ дены некоторые широко используемые типы интервалов.
Таблица 7.5. Общепринятые типы интервалов
Интервал | Описание |
Second | Количество секунд |
Minute | Количество минут |
Hour | Количество часов |
Day | Количество дней |
Month | Количество месяцев |
Year | Количество лет |
Minute_second | Количества минут и секунд, разделенные двоеточием |
Hour_second | Количества часов, минут и секунд, разделенные двоеточием |
Year_month | Количества лет и месяцев, разделенные дефмсом |
Первые шесть типов, перечисленные в табл. 7.5, довольно просты, а по_ следние три требуют немного более подробного объяснения, поскольку содержат по несколько элементов. Например, если оказалось, что опе_ рация с ID 9999 на самом деле имела место на 3 часа 27 минут и 11 се_ кунд позже того значения, которое было отправлено в таблицу Transac_ tion, исправить это можно следующим образом:
148 Глава 7. Создание, преобразование и работа с данными
UPDATE transaction
SET txn_date = DATE_ADD(txn_date, INTERVAL '3:27:11' HOUR_SECOND) WHERE txn_id = 9999;
В этом примере функция берет значение столбца txn_date, добавляет к нему 3 часа 27 минут и 11 секунд и изменяет столбец txn_date, встав_ ляя в него результирующее значение.
Или если в отделе кадров обнаруживают, что сотрудник с ID 4789 по записанным данным моложе, чем на самом деле, можно добавить к да_ те его рождения, скажем, 9 лет и 11 месяцев:
UPDATE employee
SET birth_date = DATE_ADD(birth_date, INTERVAL '9_11' YEAR_MONTH) WHERE emp_id = 4789;
Для пользователей SQL Server предыдущий пример можно бы_ ло бы реализовать с помощью функции dateadd():
UPDATE employee
SET birth_date =
DATEADD(MONTH, 119, birth_date)
WHERE emp_id = 4789
В SQL Server нет комбинированных интервалов (т. е. year_month), поэтому 9 лет 11 месяцев были преобразованы в 119 месяцев.
Пользователи Oracle Database могут для данного примера при_ менить функцию add_months():
UPDATE employee
SET birth_date = ADD_MONTHS(birth_date, 119)
WHERE emp_id = 4789;
Иногда требуется добавить интервал времени к определенной дате, при этом известна конечная дата выполнения, но неизвестно, сколько дней осталось до этой даты. Например, клиент банка регистрируется в сете_ вой банковской системе и планирует перевод на конец месяца. Вместо того чтобы писать какой_то код, определяющий текущий месяц и вы_ числяющий количество дней в этом месяце, можно вызвать функцию last_day() (последний день), которая сделает всю работу (и MySQL, и Oracle Database включают функцию last_day(); в SQL Server сопос_ тавимой функции нет). Если клиент запрашивает перевод 25 марта 2005 года, последний день марта можно найти следующим образом:
mysql> SELECT LAST_DAY('2005_03_25');
+________________________+ | LAST_DAY('2005_03_25') | +________________________+ | 2005_03_31 | +________________________+ 1 row in set (0.04 sec)
Временные данные | |
Независимо от того, предоставляется ли значение типа date или date_ time, функция last_day() всегда возвращает значение типа date. Хотя, может быть, и не заметно, что эта функция существенно экономит вре_ мя, но если требуется найти последний день февраля и для этого выяс_ нить, високосный этот год или нет, логика вычисления может быть до_ вольно сложной.
Еще одна временная функция, возвращающая дату, преобразует зна_ чение типа datetime из одного временного пояса в другой. Для этого MySQL включает функцию convert_tz(), а Oracle Database – функцию new_time() (новое время). Например, если требуется преобразовать те_ кущее местное время в UTC, можно сделать следующее:
mysql> SELECT CURRENT_TIMESTAMP() current_est,
_> CONVERT_TZ(CURRENT_TIMESTAMP(), 'US/Eastern', 'UTC') current_utc;
+_____________________+_____________________+
| current_est | current_utc |
+_____________________+_____________________+
| 2005_04_18 21:23:25 | 2005_04_19 01:23:25 |
+_____________________+_____________________+
1 row in set (0.50 sec)
Эта функция очень полезна при получении дат из других часовых поя_ сов, отличных от того, в котором хранится база данных.
Дата добавления: 2015-08-17; просмотров: 62 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Функции для создания дат | | | Временные функции, возвращающие строки |