12.7 Функции даты и времени
В этом разделе описываются функции, которые можно использовать для обработки временных значений. См. Раздел 11.2, «Типы данных даты и времени», для описания диапазона значений каждого типа даты и времени и допустимых форматов, в которых можно указать значения.
Таблица 12.11 Функции даты и времени
| Имя | Описание |
|---|---|
ADDDATE() | Добавление временных значений (интервалов) к значению даты |
ADDTIME() | Добавление времени |
CONVERT_TZ() | Преобразование из одной временной зоны в другую |
CURDATE() | Возвращение текущей даты |
CURRENT_DATE(), CURRENT_DATE | Синонимы для CURDATE() |
CURRENT_TIME(), CURRENT_TIME | Синонимы для CURTIME() |
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP | Синонимы для NOW() |
CURTIME() | Возвращение текущего времени |
DATE() | Извлечение части даты из выражения даты или даты и времени |
DATE_ADD() | Добавление временных значений (интервалов) к значению даты |
DATE_FORMAT() | Форматирование даты в соответствии со спецификацией |
DATE_SUB() | Вычитание временного значения (интервала) из даты |
DATEDIFF() | Вычитание двух дат |
DAY() | Синоним для DAYOFMONTH() |
DAYNAME() | Возвращение названия дня недели |
DAYOFMONTH() | Возвращение дня месяца (0-31) |
DAYOFWEEK() | Возвращение индекса дня недели для аргумента |
DAYOFYEAR() | Возвращение дня года (1-366) |
EXTRACT() | Извлечение части даты |
FROM_DAYS() | Преобразование номера дня в дату |
FROM_UNIXTIME() | Форматирование Unix-временной метки как даты |
GET_FORMAT() | Возвращение строки формата даты |
HOUR() | Извлечение часа |
LAST_DAY | Возвращение последнего дня месяца для аргумента |
LOCALTIME(), LOCALTIME | Синоним для NOW() |
LOCALTIMESTAMP, LOCALTIMESTAMP() | Синоним для NOW() |
MAKEDATE() | Создание даты из года и дня года |
MAKETIME() | Создание времени из часа, минуты, секунды |
MICROSECOND() | Возвращение микросекунд из аргумента |
MINUTE() | Возвращение минуты из аргумента |
MONTH() | Возвращение месяца из переданной даты |
MONTHNAME() | Возвращение названия месяца |
NOW() | Возвращение текущей даты и времени |
PERIOD_ADD() | Добавление периода к году-месяцу |
PERIOD_DIFF() | Возвращение количества месяцев между периодами |
QUARTER() | Возвращение квартала из аргумента даты |
SEC_TO_TIME() | Преобразование секунд в формат 'чч:мм:сс' |
SECOND() | Возвращение секунды (0-59) |
STR_TO_DATE() | Преобразование строки в дату |
SUBDATE() | Синоним для DATE_SUB() при вызове с тремя аргументами |
SUBTIME() | Вычитание временных значений |
SYSDATE() | Возвращение времени, в которое выполняется функция |
TIME() | Извлечение временной части переданного выражения |
TIME_FORMAT() | Форматирование как время |
TIME_TO_SEC() | Возвращение аргумента, преобразованного в секунды |
TIMEDIFF() | Вычитание времени |
TIMESTAMP() | С одним аргументом эта функция возвращает выражение даты или даты и времени; с двумя аргументами — сумму аргументов |
TIMESTAMPADD() | Добавление интервала к выражению даты и времени |
TIMESTAMPDIFF() | Возвращает разницу между двумя выражениями даты и времени, используя указанные единицы |
TO_DAYS() | Возвращение аргумента даты, преобразованного в дни |
TO_SECONDS() | Возвращение аргумента даты или даты и времени, преобразованного в секунды с года 0 |
UNIX_TIMESTAMP() | Возвращение Unix-временной метки |
UTC_DATE() | Возвращение текущей даты UTC |
UTC_TIME() | Возвращение текущего времени UTC |
UTC_TIMESTAMP() | Возвращение текущей даты и времени UTC |
WEEK() | Возвращение номера недели |
WEEKDAY() | Возвращение индекса дня недели |
WEEKOFYEAR() | Возвращение календарной недели даты (1-53) |
YEAR() | Возвращение года |
YEARWEEK() | Возвращение года и недели |
Вот пример, использующий функции даты. Следующий запрос выбирает все строки со значением date_col за последние 30 дней:
mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
Запрос также выбирает строки с датами, которые находятся в будущем.
Функции, которые ожидают значения даты, обычно принимают значения даты и времени, игнорируя временную часть. Функции, которые ожидают временные значения, обычно принимают значения даты и времени, игнорируя часть даты.
Функции, возвращающие текущую дату или время, вычисляются только один раз на запрос в начале выполнения запроса. Это означает, что несколько ссылок на функцию, такую как NOW() в рамках одного запроса всегда возвращают один и тот же результат. (Для наших целей, один запрос также включает вызов хранимой программы (хранимой процедуры, триггера или события) и всех подпрограмм, вызываемых этой программой.) Этот принцип также применим к CURDATE(), CURTIME(), UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP(), а также к любым их синонимам.
Функции CURRENT_TIMESTAMP(), CURRENT_TIME(), CURRENT_DATE() и FROM_UNIXTIME() возвращают значения в часовом поясе текущей сессии, который доступен как значение сессии переменной системы time_zone. Кроме того, UNIX_TIMESTAMP() предполагает, что ее аргумент представляет собой значение даты и времени в часовом поясе текущей сессии. См. Раздел 5.1.13, «Поддержка часовых поясов в MySQL Server».
Некоторые функции даты могут использоваться с датами «ноль» или неполными датами, такими как '2001-11-00', в то время как другие нет. Функции, которые извлекают части дат, обычно работают с неполными датами и, следовательно, могут возвращать 0, когда вы ожидаете ненулевое значение. Например:
mysql> SELECT DAYOFMONTH('2001-11-00'), MONTH('2005-00-00');
-> 0, 0
Другие функции ожидают полные даты и возвращают NULL для неполных дат. К ним относятся функции, выполняющие арифметические операции с датами или сопоставляющие части дат с именами. Например:
mysql> SELECT DATE_ADD('2006-05-00',INTERVAL 1 DAY);
-> NULL
mysql> SELECT DAYNAME('2006-05-00');
-> NULL
Несколько функций строго проверяют, если значение функции DATE() передается в качестве аргумента, и отклоняют неполные даты с нулевой частью дня: CONVERT_TZ(), DATE_ADD(), DATE_SUB(), DAYOFYEAR(), TIMESTAMPDIFF(), TO_DAYS(), TO_SECONDS(), WEEK(), WEEKDAY(), WEEKOFYEAR(), YEARWEEK().
Дробные секунды для TIME, DATETIME и TIMESTAMP значений поддерживаются с точностью до микросекунд. Функции, принимающие временные аргументы, принимают значения с дробными секундами. Возвращаемые значения временных функций включают дробные секунды при необходимости.
-
ADDDATE(,date,INTERVALexprunit)ADDDATE(expr,days)При вызове с формой второго аргумента
INTERVAL,ADDDATE()является синонимом дляDATE_ADD(). Соответствующая функцияSUBDATE()является синонимом дляDATE_SUB(). Сведения оINTERVALаргументеunitсм. в Временные интервалы.mysql>
SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);-> '2008-02-02' mysql>SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);-> '2008-02-02'При вызове с формой второго аргумента
daysMySQL рассматривает его как целое число дней, которые необходимо добавить кexpr.mysql>
SELECT ADDDATE('2008-01-02', 31);-> '2008-02-02' -
ADDTIME()добавляетexpr2кexpr1и возвращает результат.expr1— выражение времени или даты и времени, аexpr2— выражение времени.mysql>
SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');-> '2008-01-02 01:01:01.000001' mysql>SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');-> '03:00:01.999997' -
CONVERT_TZ()преобразует значение даты и времениdtиз часового пояса, заданногоfrom_tz, в часовой пояс, заданныйto_tz, и возвращает полученное значение. Часовые пояса задаются, как описано в Разделе 5.1.13, «Поддержка часовых поясов MySQL-сервера». Если аргументы неверны, функция возвращаетNULL.Если значение выходит за поддерживаемый диапазон типа
TIMESTAMPпри преобразовании изfrom_tzв UTC, преобразование не выполняется. ДиапазонTIMESTAMPописан в Разделе 11.2.1, «Синтаксис типов данных даты и времени».mysql>
SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');-> '2004-01-01 13:00:00' mysql>SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');-> '2004-01-01 22:00:00'ПримечаниеДля использования именованных часовых поясов, таких как
'MET'или'Europe/Amsterdam', таблицы часовых поясов должны быть должным образом настроены. Инструкции см. в Разделе 5.1.13, «Поддержка часовых поясов MySQL-сервера». -
Возвращает текущую дату в виде значения в формате
'илиYYYY-MM-DD'YYYYMMDD, в зависимости от того, используется ли функция в строковом или числовом контексте.mysql>
SELECT CURDATE();-> '2008-06-13' mysql>SELECT CURDATE() + 0;-> 20080613 -
CURRENT_DATEиCURRENT_DATE()являются синонимами дляCURDATE(). -
CURRENT_TIME,CURRENT_TIME([fsp])CURRENT_TIMEиCURRENT_TIME()являются синонимами дляCURTIME(). -
CURRENT_TIMESTAMP,CURRENT_TIMESTAMP([fsp])CURRENT_TIMESTAMPиCURRENT_TIMESTAMP()являются синонимами дляNOW(). -
Возвращает текущее время в формате
'hh:mm:ss'илиhhmmss, в зависимости от того, используется ли функция в строковом или числовом контексте. Значение выражается в часовом поясе сеанса.Если аргумент
fspзадан для указания точности дробных секунд от 0 до 6, возвращаемое значение включает дробную часть секунд с указанным количеством цифр.mysql>
SELECT CURTIME();-> '23:50:26' mysql>SELECT CURTIME() + 0;-> 235026.000000 -
Извлекает часть даты из выражения даты или даты и времени
expr.mysql>
SELECT DATE('2003-12-31 01:02:03');-> '2003-12-31' -
DATEDIFF()возвращаетexpr1−expr2, выраженное как количество дней между двумя датами.expr1иexpr2— выражения даты или даты и времени. В расчётах используются только части дат значений.mysql>
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');-> 1 mysql>SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');-> -31 -
DATE_ADD(,date,INTERVALexprunit)DATE_SUB(date,INTERVALexprunit)Эти функции выполняют арифметические операции с датами. Аргумент
dateзадаёт начальное значение даты или даты и времени.expr— выражение, определяющее значение интервала, которое нужно добавить или вычесть из начальной даты.exprоценивается как строка; она может начинаться с-для отрицательных интервалов.unit— ключевое слово, указывающее единицы, в которых должно интерпретироваться выражение.Дополнительные сведения о синтаксисе временных интервалов, включая полный список спецификаторов
unit, ожидаемой форме аргументаexprдля каждого значенияunitи правил интерпретации операндов в временной арифметике, см. в Временные интервалы.Возвращаемое значение зависит от аргументов:
DATE, если аргументdate— значениеDATEи ваши вычисления включают толькоYEAR,MONTHиDAYчасти (то есть, без частей времени).DATETIME, если первый аргумент — значениеDATETIME(илиTIMESTAMP), или если первый аргумент —DATEи значениеunitиспользуетHOURS,MINUTESилиSECONDS.Строка в противном случае.
Для обеспечения того, что результат будет
DATETIME, можно использоватьCAST()для преобразования первого аргумента вDATETIME.mysql>
SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);-> '2018-05-02' mysql>SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);-> '2017-05-01' mysql>SELECT DATE_ADD('2020-12-31 23:59:59',->INTERVAL 1 SECOND);-> '2021-01-01 00:00:00' mysql>SELECT DATE_ADD('2018-12-31 23:59:59',->INTERVAL 1 DAY);-> '2019-01-01 23:59:59' mysql>SELECT DATE_ADD('2100-12-31 23:59:59',->INTERVAL '1:1' MINUTE_SECOND);-> '2101-01-01 00:01:00' mysql>SELECT DATE_SUB('2025-01-01 00:00:00',->INTERVAL '1 1:1:1' DAY_SECOND);-> '2024-12-30 22:58:59' mysql>SELECT DATE_ADD('1900-01-01 00:00:00',->INTERVAL '-1 10' DAY_HOUR);-> '1899-12-30 14:00:00' mysql>SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);-> '1997-12-02' mysql>SELECT DATE_ADD('1992-12-31 23:59:59.000002',->INTERVAL '1.999999' SECOND_MICROSECOND);-> '1993-01-01 00:00:01.000001'При добавлении
MONTHинтервала к значениюDATEилиDATETIME, и полученная дата включает день, который не существует в заданном месяце, день корректируется до последнего дня месяца, как показано здесь:mysql>
SELECT DATE_ADD('2024-03-30', INTERVAL 1 MONTH) AS d1,>DATE_ADD('2024-03-31', INTERVAL 1 MONTH) AS d2;+------------+------------+ | d1 | d2 | +------------+------------+ | 2024-04-30 | 2024-04-30 | +------------+------------+ 1 row in set (0.00 sec)
-
Форматирует значение
dateв соответствии со строкойformat.В строке
formatмогут использоваться спецификаторы, показанные в следующей таблице. Перед символами спецификатора формата требуется символ%. Эти спецификаторы также применяются к другим функциям:STR_TO_DATE(),TIME_FORMAT(),UNIX_TIMESTAMP().Specifier Описание %aСокращённое название дня недели ( Sun..Sat)%bСокращённое название месяца ( Jan..Dec)%cНомер месяца ( 0..12)%DЧисло месяца с английским суффиксом ( 0th,1st,2nd,3rd, …)%dЧисло месяца ( 00..31)%eЧисло месяца ( 0..31)%fМикросекунды ( 000000..999999)%HЧасы ( 00..23)%hЧасы ( 01..12)%IЧасы ( 01..12)%iМинуты ( 00..59)%jДень года ( 001..366)%kЧасы ( 0..23)%lЧасы ( 1..12)%MНазвание месяца ( January..December)%mНомер месяца ( 00..12)%pAMилиPM%rВремя в 12-часовом формате ( hh:mm:ss, за которым следуютAMилиPM)%SСекунды ( 00..59)%sСекунды ( 00..59)%TВремя в 24-часовом формате ( hh:mm:ss)%UНеделя ( 00..53), где воскресенье — первый день недели; режим 0 функцииWEEK()%uНеделя ( 00..53), где понедельник — первый день недели; режим 1 функцииWEEK()%VНеделя ( 01..53), где воскресенье — первый день недели; режим 2 функцииWEEK(); используется с%X%vНеделя ( 01..53), где понедельник — первый день недели; режим 3 функцииWEEK(); используется с%x%WПолное название дня недели ( Sunday..Saturday)%wНомер дня недели ( 0=воскресенье..6=суббота)%XГод для недели, где воскресенье — первый день, числовой, четыре цифры; используется с %V%xГод для недели, где понедельник — первый день, числовой, четыре цифры; используется с %v%YГод, числовой, четыре цифры %yГод, числовой (две цифры) %%Буквальный символ %%xx, для любого “x” не указанного вышеДиапазоны для спецификаторов месяца и дня начинаются с нуля, поскольку MySQL допускает хранение неполных дат, таких как
'2014-00-00'.Язык, используемый для названий и сокращений дней и месяцев, определяется значением системной переменной
lc_time_names(Раздел 10.16, «Поддержка локалей сервера MySQL»).Для спецификаторов
%U,%u,%Vи%vсм. описание функцииWEEK()для получения информации о значениях режима. Режим влияет на то, как происходит нумерация недель.DATE_FORMAT()возвращает строку с кодировкой символов и сортировкой, заданнойcharacter_set_connectionиcollation_connection, поэтому она может возвращать названия месяцев и дней недели, содержащие не-ASCII символы.mysql>
SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');-> 'Sunday October 2009' mysql>SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');-> '22:23:00' mysql>SELECT DATE_FORMAT('1900-10-04 22:23:00',->'%D %y %a %d %m %b %j');-> '4th 00 Thu 04 10 Oct 277' mysql>SELECT DATE_FORMAT('1997-10-04 22:23:00',->'%H %k %I %r %T %S %w');-> '22 22 10 10:23:00 PM 22:23:00 00 6' mysql>SELECT DATE_FORMAT('1999-01-01', '%X %V');-> '1998 52' mysql>SELECT DATE_FORMAT('2006-06-00', '%d');-> '00' -
DATE_SUB(date,INTERVALexprunit)См. описание
DATE_ADD(). -
DAY()является синонимом дляDAYOFMONTH(). -
Возвращает имя дня недели для
date. Используемый язык определяется значением системной переменнойlc_time_names(Раздел 10.16, «Поддержка локалей сервера MySQL»).mysql>
SELECT DAYNAME('2007-02-03');-> 'Saturday' -
Возвращает число месяца для
dateв диапазоне от1до31или0для дат, таких как'0000-00-00'или'2008-00-00', у которых часть дня равна нулю.mysql>
SELECT DAYOFMONTH('2007-02-03');-> 3 -
Возвращает индекс дня недели для
date(1= воскресенье,2= понедельник, …,7= суббота). Эти значения индекса соответствуют стандарту ODBC.mysql>
SELECT DAYOFWEEK('2007-02-03');-> 7 -
Возвращает номер дня года для
dateв диапазоне от1до366.mysql>
SELECT DAYOFYEAR('2007-02-03');-> 34 -
Функция
EXTRACT()использует те же типы спецификаторовunit, что иDATE_ADD()илиDATE_SUB(), но извлекает части даты вместо выполнения арифметических операций с датами. Для информации об аргументеunitсм. Временные интервалы.mysql>
SELECT EXTRACT(YEAR FROM '2019-07-02');-> 2019 mysql>SELECT EXTRACT(YEAR_MONTH FROM '2019-07-02 01:02:03');-> 201907 mysql>SELECT EXTRACT(DAY_MINUTE FROM '2019-07-02 01:02:03');-> 20102 mysql>SELECT EXTRACT(MICROSECOND->FROM '2003-01-02 10:30:00.000123');-> 123 -
При заданном номере дня
Nвозвращает значение типаDATE.mysql>
SELECT FROM_DAYS(730669);-> '2000-07-03'Используйте
FROM_DAYS()с осторожностью для старых дат. Она не предназначена для использования со значениями, предшествующими появлению григорианского календаря (1582). См. Раздел 11.2.8, «Какой календарь используется MySQL?».
-
FROM_UNIXTIME(unix_timestamp[,format])Возвращает представление
unix_timestampв виде значения даты и времени или строкового значения. Возвращаемое значение выражается с использованием часового пояса сессии. (Клиенты могут установить часовой пояс сессии, как описано в разделе 5.1.13, «Поддержка часовых поясов сервера MySQL».)unix_timestamp— это внутреннее значение метки времени, представляющее секунды с момента'1970-01-01 00:00:00'UTC, например, полученные функциейUNIX_TIMESTAMP().Если
formatопущено, эта функция возвращает значениеDATETIME.Если
unix_timestamp— целое число, то точность дробной части секунд вDATETIMEравна нулю. Когдаunix_timestamp— десятичное значение, точность дробной части секунд вDATETIMEтакая же, как точность десятичного значения, но не более 6. Когдаunix_timestamp— число с плавающей точкой, точность дробной части секунд в дате и времени составляет 6.formatиспользуется для форматирования результата так же, как строка формата, используемая для функцииDATE_FORMAT(). Еслиformatуказано, возвращаемое значение являетсяVARCHAR.mysql>
SELECT FROM_UNIXTIME(1447430881);-> '2015-11-13 10:08:01' mysql>SELECT FROM_UNIXTIME(1447430881) + 0;-> 20151113100801 mysql>SELECT FROM_UNIXTIME(1447430881,->'%Y %D %M %h:%i:%s %x');-> '2015 13th November 10:08:01 2015'ПримечаниеЕсли вы используете
UNIX_TIMESTAMP()иFROM_UNIXTIME()для преобразования между значениями в часовом поясе, отличном от UTC, и значениями Unix-времени, преобразование является потерей информации, так как отображение не является взаимно однозначным в обоих направлениях. Подробности см. в описании функцииUNIX_TIMESTAMP(). -
GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})Возвращает строку формата. Эта функция полезна в сочетании с функциями
DATE_FORMAT()иSTR_TO_DATE().Возможные значения для первого и второго аргументов приводят к нескольким возможным строкам формата (для используемых спецификаторов см. таблицу в описании функции
DATE_FORMAT()). Формат ISO относится к ISO 9075, а не к ISO 8601.Вызов функции Результат GET_FORMAT(DATE,'USA')'%m.%d.%Y'GET_FORMAT(DATE,'JIS')'%Y-%m-%d'GET_FORMAT(DATE,'ISO')'%Y-%m-%d'GET_FORMAT(DATE,'EUR')'%d.%m.%Y'GET_FORMAT(DATE,'INTERNAL')'%Y%m%d'GET_FORMAT(DATETIME,'USA')'%Y-%m-%d %H.%i.%s'GET_FORMAT(DATETIME,'JIS')'%Y-%m-%d %H:%i:%s'GET_FORMAT(DATETIME,'ISO')'%Y-%m-%d %H:%i:%s'GET_FORMAT(DATETIME,'EUR')'%Y-%m-%d %H.%i.%s'GET_FORMAT(DATETIME,'INTERNAL')'%Y%m%d%H%i%s'GET_FORMAT(TIME,'USA')'%h:%i:%s %p'GET_FORMAT(TIME,'JIS')'%H:%i:%s'GET_FORMAT(TIME,'ISO')'%H:%i:%s'GET_FORMAT(TIME,'EUR')'%H.%i.%s'GET_FORMAT(TIME,'INTERNAL')'%H%i%s'TIMESTAMPтакже может использоваться в качестве первого аргумента дляGET_FORMAT(), в этом случае функция возвращает те же значения, что и дляDATETIME.mysql>
SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));-> '03.10.2003' mysql>SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));-> '2003-10-31' -
Возвращает час для
time. Диапазон возвращаемого значения составляет от0до23для значений времени суток. Однако диапазон значенийTIMEфактически намного больше, поэтомуHOURможет возвращать значения больше, чем23.mysql>
SELECT HOUR('10:05:03');-> 10 mysql>SELECT HOUR('272:59:59');-> 272 -
Принимает значение даты или даты и времени и возвращает соответствующее значение для последнего дня месяца. Возвращает
NULL, если аргумент недопустим.mysql>
SELECT LAST_DAY('2003-02-05');-> '2003-02-28' mysql>SELECT LAST_DAY('2004-02-05');-> '2004-02-29' mysql>SELECT LAST_DAY('2004-01-01 01:01:01');-> '2004-01-31' mysql>SELECT LAST_DAY('2003-03-32');-> NULL -
LOCALTIMEиLOCALTIME()являются синонимами дляNOW(). -
LOCALTIMESTAMP,LOCALTIMESTAMP([fsp])LOCALTIMESTAMPиLOCALTIMESTAMP()являются синонимами дляNOW(). -
Возвращает дату, заданную значениями года и дня года.
dayofyearдолжно быть больше 0, иначе результатом будетNULL.mysql>
SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);-> '2011-01-31', '2011-02-01' mysql>SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);-> '2011-12-31', '2014-12-31' mysql>SELECT MAKEDATE(2011,0);-> NULL -
Возвращает значение времени, вычисленное из аргументов
hour,minuteиsecond.Аргумент
secondможет иметь дробную часть.mysql>
SELECT MAKETIME(12,15,30);-> '12:15:30' -
Возвращает микросекунды из выражения времени или даты и времени
exprкак число в диапазоне от0до999999.mysql>
SELECT MICROSECOND('12:00:00.123456');-> 123456 mysql>SELECT MICROSECOND('2019-12-31 23:59:59.000010');-> 10 -
Возвращает минуты для
timeв диапазоне от0до59.mysql>
SELECT MINUTE('2008-02-03 10:05:03');-> 5 -
Возвращает месяц для
dateв диапазоне от1до12для января-декабря или0для дат, таких как'0000-00-00'или'2008-00-00', у которых есть нулевая часть месяца.mysql>
SELECT MONTH('2008-02-03');-> 2 -
Возвращает полное имя месяца для
date. Язык, используемый для имени, контролируется значением системной переменнойlc_time_names(раздел 10.16, «Поддержка локали сервера MySQL»).mysql>
SELECT MONTHNAME('2008-02-03');-> 'February'
-
Возвращает текущую дату и время в виде значения в формате
'илиYYYY-MM-DD hh:mm:ss'YYYYMMDDhhmmss, в зависимости от того, используется ли функция в строковом или числовом контексте. Значение выражается во временной зоне сессии.Если аргумент
fspзадан для указания точности дробных секунд от 0 до 6, возвращаемое значение включает дробную часть секунд с заданным количеством знаков.mysql>
SELECT NOW();-> '2007-12-15 23:50:26' mysql>SELECT NOW() + 0;-> 20071215235026.000000Функция NOW возвращает постоянное время, указывающее момент начала выполнения оператора. (Внутри хранимой функции или триггера, Функция NOW возвращает время начала выполнения функции или оператора триггера.) Это отличается от поведения функции Функции SYSDATE, которая возвращает точное время выполнения.
mysql>
SELECT NOW(), SLEEP(2), NOW();+---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 | +---------------------+----------+---------------------+ mysql>SELECT SYSDATE(), SLEEP(2), SYSDATE();+---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 | +---------------------+----------+---------------------+Кроме того, оператор
SET TIMESTAMPвлияет на значение, возвращаемое функцией NOW, но не функцией SYSDATE. Это означает, что настройки временных меток в бинарном журнале не влияют на вызовы функции SYSDATE. Установка временной метки на ненулевое значение приводит к тому, что каждый последующий вызов функции NOW возвращает это значение. Установка временной метки в ноль отменяет это действие, так что функция NOW снова возвращает текущую дату и время.Дополнительную информацию о различиях между двумя функциями см. в описании функции SYSDATE.
-
Добавляет
Nмесяцев к периодуP(в форматеYYMMилиYYYYMM). Возвращает значение в форматеYYYYMM.ПримечаниеАргумент периода
Pне является значением даты.mysql>
SELECT PERIOD_ADD(200801,2);-> 200803 -
Возвращает количество месяцев между периодами
P1иP2.P1иP2должны быть в форматеYYMMилиYYYYMM. Обратите внимание, что аргументы периодаP1иP2не являются значениями дат.mysql>
SELECT PERIOD_DIFF(200802,200703);-> 11 -
Возвращает квартал года для
dateв диапазоне от1до4.mysql>
SELECT QUARTER('2008-04-01');-> 2 -
Возвращает секунды для
timeв диапазоне от0до59.mysql>
SELECT SECOND('10:05:03');-> 3 -
Возвращает аргумент
seconds, преобразованный в часы, минуты и секунды, как значение типа TIME. Диапазон результата ограничен диапазоном данных типа TIME. Возникает предупреждение, если аргумент соответствует значению за пределами этого диапазона.mysql>
SELECT SEC_TO_TIME(2378);-> '00:39:38' mysql>SELECT SEC_TO_TIME(2378) + 0;-> 3938 -
Это обратная функция DATE_FORMAT. Она принимает строку
strи строку форматаformat. Функция STR_TO_DATE возвращает значение DATETIME, если строка формата содержит части даты и времени, или значение DATE или TIME, если строка содержит только части даты или времени. ЕслиstrилиformatравныNULL, функция возвращаетNULL. Если значение даты, времени или datetime, извлеченное изstr, не может быть проанализировано в соответствии с правилами сервера, STR_TO_DATE возвращаетNULLи генерирует предупреждение.Сервер сканирует
str, пытаясь сопоставитьformatс ним. Строка формата может содержать литерные символы и спецификаторы формата, начинающиеся с%. Литерные символы вformatдолжны точно соответствоватьstr. Спецификаторы формата вformatдолжны соответствовать части даты или времени вstr. Для спецификаторов, которые можно использовать вformat, см. описание функции DATE_FORMAT.mysql>
SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');-> '2013-05-01' mysql>SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');-> '2013-05-01'Сканирование начинается с начала
strи завершается неудачей, еслиformatне совпадает. Дополнительные символы в концеstrигнорируются.mysql>
SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');-> '09:30:17' mysql>SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');-> NULL mysql>SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');-> '09:30:17'Неопределённые части даты или времени имеют значение 0, поэтому неполные значения в
strпроизводят результат с некоторыми или всеми частями, установленными в 0:mysql>
SELECT STR_TO_DATE('abc','abc');-> '0000-00-00' mysql>SELECT STR_TO_DATE('9','%m');-> '0000-09-00' mysql>SELECT STR_TO_DATE('9','%s');-> '00:00:09'Проверка диапазона частей значений дат описана в разделе 11.2.2, «Типы данных DATE, DATETIME и TIMESTAMP». Это означает, например, что год проверяется на попадание в диапазон 0-9999 включительно, месяц проверяется на попадание в диапазон 1-12 включительно, а день месяца проверяется на попадание в диапазон 1-31 включительно, но сервер не проверяет значения в сочетании. Например,
SELECT STR_TO_DATE('23-2-31', '%Y-%m-%d')возвращает2023-02-31. Включение или выключение серверного SQL-режима sqlmode_allow_invalid_dates не влияет на это поведение. См. раздел 11.2.2, «Типы данных DATE, DATETIME и TIMESTAMP» для получения дополнительной информации.mysql>
SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');-> '0000-00-00' mysql>SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');-> '2004-04-31'Если включен SQL-режим sqlmode_no_zero_date, нулевые даты запрещены. В этом случае STR_TO_DATE возвращает
NULLи генерирует предупреждение:mysql>
SET sql_mode = '';mysql>SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');+---------------------------------------+ | STR_TO_DATE('00/00/0000', '%m/%d/%Y') | +---------------------------------------+ | 0000-00-00 | +---------------------------------------+ mysql>SET sql_mode = 'NO_ZERO_DATE';mysql>SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');+---------------------------------------+ | STR_TO_DATE('00/00/0000', '%m/%d/%Y') | +---------------------------------------+ | NULL | +---------------------------------------+ mysql>SHOW WARNINGS\G*************************** 1. row *************************** Level: Warning Code: 1411 Message: Incorrect datetime value: '00/00/0000' for function str_to_dateДо версии MySQL 5.7.44 было возможно передать строку с некорректной датой, например,
'2021-11-31', в эту функцию. В MySQL 5.7.44 и более поздних версияхSTR_TO_DATE()выполняет полную проверку диапазона и генерирует ошибку, если дата после преобразования окажется некорректной.ПримечаниеНельзя использовать формат
"%X%V"для преобразования строки год-неделя в дату, потому что сочетание года и недели не однозначно определяет год и месяц, если неделя пересекает границу месяца. Чтобы преобразовать год-неделя в дату, необходимо также указать день недели:mysql>
SELECT STR_TO_DATE('200442 Monday', '%X%V %W');-> '2004-10-18'Также следует учитывать, что для дат и частей дат в значениях datetime
STR_TO_DATE()проверяются (только) отдельные значения года, месяца и дня месяца на валидность. Точнее, это означает, что год проверяется на попадание в диапазон от 0 до 9999 включительно, месяц проверяется на попадание в диапазон от 1 до 12 включительно, а день месяца проверяется на попадание в диапазон от 1 до 31 включительно, но сервер не проверяет значения в сочетании. Например,SELECT STR_TO_DATE('23-2-31', '%Y-%m-%d')возвращает2023-02-31. Включение или выключение серверного SQL-режима sqlmode_allow_invalid_dates не влияет на это поведение. Дополнительная информация представлена в разделе 11.2.2, «Типы данных DATE, DATETIME и TIMESTAMP».
-
SUBDATE(,date,INTERVALexprunit)SUBDATE(expr,days)При вызове со второй аргументом в форме
INTERVAL,SUBDATE()является синонимом дляDATE_SUB(). Для получения информации об аргументеunitсм. обсуждение функцииDATE_ADD().mysql>
SELECT DATE_SUB('2008-01-02', INTERVAL 31 DAY);-> '2007-12-02' mysql>SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);-> '2007-12-02'Вторая форма позволяет использовать целочисленное значение для
days. В таких случаях оно интерпретируется как количество дней, которое необходимо вычесть из даты или выражения datetimeexpr.mysql>
SELECT SUBDATE('2008-01-02 12:00:00', 31);-> '2007-12-02 12:00:00' -
SUBTIME()возвращаетexpr1−expr2, выраженное как значение в том же формате, что иexpr1.expr1— это выражение времени или datetime, аexpr2— выражение времени.mysql>
SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');-> '2007-12-30 22:58:58.999997' mysql>SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');-> '-00:59:59.999999' -
Возвращает текущую дату и время в формате
'илиYYYY-MM-DD hh:mm:ss'YYYYMMDDhhmmss, в зависимости от того, используется ли функция в строковом или числовом контексте.Если аргумент
fspзадан для указания точности долей секунды от 0 до 6, возвращаемое значение включает часть долей секунд с заданным количеством знаков.SYSDATE()возвращает время, в котором она выполняется. Это отличается от поведенияNOW(), которое возвращает постоянное время, указывающее время, в котором оператор начал выполняться. (Внутри хранимой функции или триггераNOW()возвращает время, в котором функция или триггерное утверждение начали выполняться.)mysql>
SELECT NOW(), SLEEP(2), NOW();+---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 | +---------------------+----------+---------------------+ mysql>SELECT SYSDATE(), SLEEP(2), SYSDATE();+---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 | +---------------------+----------+---------------------+Кроме того, оператор
SET TIMESTAMPвлияет на значение, возвращаемоеNOW(), но неSYSDATE(). Это означает, что настройки временных меток в двоичном журнале не влияют на вызовыSYSDATE().Поскольку
SYSDATE()может возвращать разные значения даже в рамках одного оператора и не зависит отSET TIMESTAMP, она является недетерминированной и, следовательно, небезопасной для репликации, если используется двоичный лог на основе оператора. Если это проблема, вы можете использовать журнал на основе строк.В качестве альтернативы вы можете использовать параметр
--sysdate-is-now, чтобыSYSDATE()стал псевдонимом дляNOW(). Это работает, если параметр используется как на источнике, так и на реплике.Недетерминированный характер
SYSDATE()также означает, что индексы не могут использоваться для оценки выражений, которые ссылаются на него. -
Извлекает часть времени выражения времени или datetime
exprи возвращает ее как строку.Эта функция небезопасна для репликации на основе операторов. Если вы используете эту функцию, когда
binlog_formatзадано в значениеSTATEMENT, будет записано предупреждение.mysql>
SELECT TIME('2003-12-31 01:02:03');-> '01:02:03' mysql>SELECT TIME('2003-12-31 01:02:03.000123');-> '01:02:03.000123' -
TIMEDIFF()возвращаетexpr1−expr2, выраженное как значение времени.expr1иexpr2— это строки, которые преобразуются в выраженияTIMEилиDATETIME; они должны быть одного типа после преобразования.Результат, возвращаемый
TIMEDIFF(), ограничен диапазоном, разрешенным для значенийTIME. В качестве альтернативы вы можете использовать функцииTIMESTAMPDIFF()иUNIX_TIMESTAMP(), которые возвращают целые числа.mysql>
SELECT TIMEDIFF('2000:01:01 00:00:00',->'2000:01:01 00:00:00.000001');-> '-00:00:00.000001' mysql>SELECT TIMEDIFF('2008-12-31 23:59:59.000001',->'2008-12-30 01:01:01.000002');-> '46:58:57.999999' -
TIMESTAMP(,expr)TIMESTAMP(expr1,expr2)С одним аргументом эта функция возвращает выражение даты или datetime
exprкак значение datetime. С двумя аргументами она добавляет выражение времениexpr2к выражению даты или datetimeexpr1и возвращает результат как значение datetime.mysql>
SELECT TIMESTAMP('2003-12-31');-> '2003-12-31 00:00:00' mysql>SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');-> '2004-01-01 00:00:00' -
TIMESTAMPADD(unit,interval,datetime_expr)Добавляет целочисленное выражение
intervalк выражению даты или datetimedatetime_expr. Единица дляintervalзадается аргументомunit, который должен быть одним из следующих значений:MICROSECOND(микросекунды),SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTERилиYEAR.Значение
unitможет быть задано с помощью одного из ключевых слов, как показано, или с префиксомSQL_TSI_. Например,DAYиSQL_TSI_DAY— это допустимые значения.mysql>
SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');-> '2003-01-02 00:01:00' mysql>SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');-> '2003-01-09'При добавлении интервала
MONTHк значениюDATEилиDATETIME, и если полученная дата содержит день, который не существует в данном месяце, день корректируется до последнего дня месяца, как показано здесь:mysql>
SELECT TIMESTAMPADD(MONTH, 1, DATE '2024-03-30') AS t1,>TIMESTAMPADD(MONTH, 1, DATE '2024-03-31') AS t2;+------------+------------+ | t1 | t2 | +------------+------------+ | 2024-04-30 | 2024-04-30 | +------------+------------+ 1 row in set (0.00 sec) -
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)Возвращает
datetime_expr2−datetime_expr1, гдеdatetime_expr1иdatetime_expr2— это выражения даты или datetime. Одно выражение может быть датой, а другое — datetime; значение даты обрабатывается как значение datetime, имеющее часть времени'00:00:00', если необходимо. Единица результата (целого числа) задается аргументомunit. Допустимые значения дляunitтакие же, как и те, что перечислены в описании функцииTIMESTAMPADD().mysql>
SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');-> 3 mysql>SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');-> -1 mysql>SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');-> 128885ПримечаниеПорядок аргументов даты или datetime для этой функции обратный порядку, используемому в функции
TIMESTAMP()при вызове с 2 аргументами. -
Используется подобно функции
DATE_FORMAT(), но строкаformatможет содержать спецификаторы формата только для часов, минут, секунд и микросекунд. Другие спецификаторы производят значениеNULLили0.Если значение
timeсодержит часть часа, превышающую23, спецификаторы формата часов%Hи%kпроизводят значение, большее обычного диапазона0..23. Другие спецификаторы формата часов производят значение часа по модулю 12.mysql>
SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');-> '100 100 04 04 4' -
Возвращает аргумент
time, преобразованный во секунды.mysql>
SELECT TIME_TO_SEC('22:23:00');-> 80580 mysql>SELECT TIME_TO_SEC('00:39:38');-> 2378
-
При заданной дате
date, возвращает номер дня (количество дней с года 0).mysql>
SELECT TO_DAYS(950501);-> 728779 mysql>SELECT TO_DAYS('2007-10-07');-> 733321TO_DAYS()не предназначен для использования со значениями, предшествующими появлению григорианского календаря (1582), поскольку он не учитывает дни, потерянные при изменении календаря. Для дат до 1582 года (и, возможно, более позднего года в других регионах) результаты этой функции могут быть ненадежными. Подробности см. в разделе 11.2.8, «Что за календарь используется MySQL?».Помните, что MySQL преобразует значения двузначных годов в датах в четырехзначный вид, используя правила, описанные в разделе 11.2, «Типы данных даты и времени». Например,
'2008-10-07'и'08-10-07'рассматриваются как идентичные даты:mysql>
SELECT TO_DAYS('2008-10-07'), TO_DAYS('08-10-07');-> 733687, 733687В MySQL нулевой день определяется как
'0000-00-00', хотя эта дата сама по себе считается недействительной. Это означает, что для'0000-00-00'и'0000-01-01'функцияTO_DAYS()возвращает указанные здесь значения:mysql>
SELECT TO_DAYS('0000-00-00');+-----------------------+ | to_days('0000-00-00') | +-----------------------+ | NULL | +-----------------------+ 1 row in set, 1 warning (0.00 sec) mysql>SHOW WARNINGS;+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '0000-00-00' | +---------+------+----------------------------------------+ 1 row in set (0.00 sec) mysql>SELECT TO_DAYS('0000-01-01');+-----------------------+ | to_days('0000-01-01') | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec)Это справедливо независимо от того, включён ли режим SQL-сервера
ALLOW_INVALID_DATES. -
При заданной дате или datetime
expr, возвращает количество секунд с года 0. Еслиexprне является допустимым значением даты или datetime, возвращаетNULL.mysql>
SELECT TO_SECONDS(950501);-> 62966505600 mysql>SELECT TO_SECONDS('2009-11-29');-> 63426672000 mysql>SELECT TO_SECONDS('2009-11-29 13:43:32');-> 63426721412 mysql>SELECT TO_SECONDS( NOW() );-> 63426721458Как и
TO_DAYS(), функцияTO_SECONDS()не предназначена для использования со значениями, предшествующими появлению григорианского календаря (1582), поскольку она не учитывает дни, потерянные при изменении календаря. Для дат до 1582 года (и, возможно, более позднего года в других регионах) результаты этой функции могут быть ненадежными. Подробности см. в разделе 11.2.8, «Что за календарь используется MySQL?».Как и
TO_DAYS(),TO_SECONDS()преобразует значения двузначных годов в датах в четырехзначный вид, используя правила, описанные в разделе 11.2, «Типы данных даты и времени».В MySQL нулевой день определяется как
'0000-00-00', хотя эта дата сама по себе считается недействительной. Это означает, что для'0000-00-00'и'0000-01-01'функцияTO_SECONDS()возвращает показанные здесь значения:mysql>
SELECT TO_SECONDS('0000-00-00');+--------------------------+ | TO_SECONDS('0000-00-00') | +--------------------------+ | NULL | +--------------------------+ 1 row in set, 1 warning (0.00 sec) mysql>SHOW WARNINGS;+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '0000-00-00' | +---------+------+----------------------------------------+ 1 row in set (0.00 sec) mysql>SELECT TO_SECONDS('0000-01-01');+--------------------------+ | TO_SECONDS('0000-01-01') | +--------------------------+ | 86400 | +--------------------------+ 1 row in set (0.00 sec)Это справедливо независимо от того, включён ли режим SQL-сервера
ALLOW_INVALID_DATES. -
Если
UNIX_TIMESTAMP()вызывается без аргументаdate, она возвращает метку времени Unix, представляющую секунды, прошедшие с момента'1970-01-01 00:00:00'UTC.Если
UNIX_TIMESTAMP()вызывается с аргументомdate, она возвращает значение аргумента в качестве секунд, прошедших с момента'1970-01-01 00:00:00'UTC. Сервер интерпретируетdateкак значение во временной зоне сеанса и преобразует его во внутреннее значение метки времени Unix в UTC. (Клиенты могут установить временную зону сеанса, как описано в разделе 5.1.13, «Поддержка временных зон MySQL-сервера».) Аргументdateможет быть строкойDATE,DATETIMEилиTIMESTAMP, или числом в форматеYYMMDD,YYMMDDhhmmss,YYYYMMDDилиYYYYMMDDhhmmss. Если аргумент включает часть времени, он может необязательно включать дробную часть секунд.Возвращаемое значение является целым числом, если не указан аргумент или аргумент не включает дробную часть секунд, или
DECIMAL, если аргумент включает дробную часть секунд.Когда аргумент
dateявляется столбцомTIMESTAMP,UNIX_TIMESTAMP()возвращает внутреннее значение метки времени напрямую без неявного преобразования «строка в метку времени Unix».Допустимый диапазон значений аргумента такой же, как и для типа данных
TIMESTAMP: от'1970-01-01 00:00:01.000000'UTC до'2038-01-19 03:14:07.999999'UTC. Если вы передадите значение даты, выходящее за пределы диапазона, функцииUNIX_TIMESTAMP()вернёт0.mysql>
SELECT UNIX_TIMESTAMP();-> 1447431666 mysql>SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');-> 1447431619 mysql>SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19.012');-> 1447431619.012При использовании
UNIX_TIMESTAMP()иFROM_UNIXTIME()для преобразования между значениями в часовой зоне, отличной от UTC, и значениями метки времени Unix, преобразование является потерей, поскольку соответствие не является взаимно однозначным в обоих направлениях. Например, из-за правил изменения часовых поясов, таких как летнее время, возможно, чтоUNIX_TIMESTAMP()отобразит два различных значения в часовой зоне, отличной от UTC, в одной метке времени Unix.FROM_UNIXTIME()отображает это значение только в одно из исходных значений. Вот пример, использующий значения, которые различаются во временной зонеMET:mysql>
SET time_zone = 'MET';mysql>SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');+---------------------------------------+ | UNIX_TIMESTAMP('2005-03-27 03:00:00') | +---------------------------------------+ | 1111885200 | +---------------------------------------+ mysql>SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');+---------------------------------------+ | UNIX_TIMESTAMP('2005-03-27 02:00:00') | +---------------------------------------+ | 1111885200 | +---------------------------------------+ mysql>SELECT FROM_UNIXTIME(1111885200);+---------------------------+ | FROM_UNIXTIME(1111885200) | +---------------------------+ | 2005-03-27 03:00:00 | +---------------------------+ПримечаниеДля использования именованных временных зон, таких как
'MET'или'Europe/Amsterdam', таблицы временных зон должны быть должным образом настроены. Инструкции см. в разделе 5.1.13, «Поддержка временных зон MySQL-сервера».Если вы хотите вычесть столбцы
UNIX_TIMESTAMP(), возможно, вам нужно привести их к целочисленным значениям со знаком. См. раздел 12.10, «Функции и операторы приведения типов». -
Возвращает текущую дату UTC в формате
'илиYYYY-MM-DD'YYYYMMDD, в зависимости от того, используется ли функция в строковом или числовом контексте.mysql>
SELECT UTC_DATE(), UTC_DATE() + 0;-> '2003-08-14', 20030814 -
Возвращает текущее время UTC в формате
'hh:mm:ss'илиhhmmss, в зависимости от того, используется ли функция в строковом или числовом контексте.Если аргумент
fspзадан для указания точности дробных секунд от 0 до 6, возвращаемое значение включает дробную часть секунд с указанной точностью.mysql>
SELECT UTC_TIME(), UTC_TIME() + 0;-> '18:07:53', 180753.000000 -
UTC_TIMESTAMP,UTC_TIMESTAMP([fsp])Возвращает текущую дату и время UTC в формате
'илиYYYY-MM-DD hh:mm:ss'YYYYMMDDhhmmss, в зависимости от того, используется ли функция в строковом или числовом контексте.Если аргумент
fspзадан для указания точности дробных секунд от 0 до 6, возвращаемое значение включает дробную часть секунд с указанной точностью.mysql>
SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;-> '2003-08-14 18:08:04', 20030814180804.000000
-
Эта функция возвращает номер недели для
date. Двухаргументная формаWEEK()позволяет указать, начинается ли неделя с воскресенья или понедельника, и должен ли результат быть в диапазоне от0до53или от1до53. Если аргументmodeопущен, используется значение системной переменнойdefault_week_format. См. Раздел 5.1.7, «Системные переменные сервера».Следующая таблица описывает, как работает аргумент
mode.Режим Первый день недели Диапазон Неделя 1 — это первая неделя … 0 Воскресенье 0-53 содержащая воскресенье в этом году 1 Понедельник 0-53 с 4 или более днями в этом году 2 Воскресенье 1-53 содержащая воскресенье в этом году 3 Понедельник 1-53 с 4 или более днями в этом году 4 Воскресенье 0-53 с 4 или более днями в этом году 5 Понедельник 0-53 содержащая понедельник в этом году 6 Воскресенье 1-53 с 4 или более днями в этом году 7 Понедельник 1-53 содержащая понедельник в этом году Для значений
mode, обозначающих “с 4 или более днями в этом году”, недели нумеруются в соответствии с ISO 8601:1988:Если неделя, содержащая 1 января, имеет 4 или более дней в новом году, она является неделей 1.
В противном случае она является последней неделей предыдущего года, а следующая неделя является неделей 1.
mysql>
SELECT WEEK('2008-02-20');-> 7 mysql>SELECT WEEK('2008-02-20',0);-> 7 mysql>SELECT WEEK('2008-02-20',1);-> 8 mysql>SELECT WEEK('2008-12-31',1);-> 53Если дата попадает на последнюю неделю предыдущего года, MySQL возвращает
0, если вы не используете2,3,6или7в качестве необязательного аргументаmode:mysql>
SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);-> 2000, 0Можно утверждать, что
WEEK()должна возвращать52, поскольку указанная дата фактически приходится на 52-ю неделю 1999 года.WEEK()вместо этого возвращает0, чтобы результат был “номером недели в заданном году”. Это делает использование функцииWEEK()надёжным при совместном использовании с другими функциями, извлекающими часть даты.Если вы предпочитаете результат, вычисленный относительно года, содержащего первый день недели для заданной даты, используйте
0,2,5или7в качестве необязательного аргументаmode.mysql>
SELECT WEEK('2000-01-01',2);-> 52В качестве альтернативы, используйте функцию
YEARWEEK():mysql>
SELECT YEARWEEK('2000-01-01');-> 199952 mysql>SELECT MID(YEARWEEK('2000-01-01'),5,2);-> '52' -
Возвращает индекс дня недели для
date(0= понедельник,1= вторник, …6= воскресенье).mysql>
SELECT WEEKDAY('2008-02-03 22:23:00');-> 6 mysql>SELECT WEEKDAY('2007-11-06');-> 1 -
Возвращает календарную неделю даты в виде числа в диапазоне от
1до53.WEEKOFYEAR()— это функция совместимости, эквивалентнаяWEEK(.date,3)mysql>
SELECT WEEKOFYEAR('2008-02-20');-> 8 -
Возвращает год для
dateв диапазоне от1000до9999или0для даты “ноль”.mysql>
SELECT YEAR('1987-01-01');-> 1987 -
YEARWEEK(,date)YEARWEEK(date,mode)Возвращает год и неделю для даты. Год в результате может отличаться от года в аргументе даты для первой и последней недели года.
Аргумент
modeработает точно так же, как и аргументmodeдляWEEK(). Для синтаксиса с одним аргументом используется значениеmode, равное 0. В отличие отWEEK(), значениеdefault_week_formatне влияет наYEARWEEK().mysql>
SELECT YEARWEEK('1987-01-01');-> 198652Номер недели отличается от того, что вернула бы функция
WEEK()(0) для необязательных аргументов0или1, так какWEEK()тогда возвращает неделю в контексте заданного года.
© 2025 Oracle
Licensed under the GPLv2 License.