В этом разделе описаны функции, которые могут использоваться для манипуляции значениями времени. В разделе 4.3 представлены диапазоны допустимых значений каждого типа даты и времени, а также правильные форматы, в которых они могут отображаться.
Ниже приведен пример использования функций даты. Запрос выбирает все записи, у которых значение столбец_с1а Ье находится в пределах последних 30 дней:
-> WHERE DATE_SUB(CURDATE (),INTERVAL 30 DAY) <= столбец_6аЬе;
Следует отметить, что этот запрос также выберет записи с датами, относящимися к будущему.
Функции, которые ожидают в аргументе значения даты, обычно принимают значения типа даты и времени, при этом игнорируя время. Функции, принимающие аргумент типа времени, принимают значения типа даты и времени, отбрасывая дату.
Функции, которые возвращают текущую дату или время, вычисляются только один раз на запрос, в начале его выполнения. Это значит, что множественные обращения к такой функции, как NOW (), внутри отдельного запроса всегда генерируют один и тот же результат. Этот принцип также справедлив и в отношении CURDATE O, CURTIMEO, UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP() И МНОГИХ других СИНОНИМОВ.
Диапазоны возвращаемых значений последующих описаний функций касаются полных дат. Если дата имеет “нулевое” либо неполное значение, вроде ‘2001-11-00’, функции, извлекающие часть даты, могут вернуть 0. Например, DAYOFMONTH(‘ 2001-11-00’) возвращает 0.
- ADDDATE{дата, INTERVAL выражение тип) ADDDATE {выражение, дни)
При вызове со вторым аргументом в форме INTERVAL функция ADDDARE () является синонимом DATE_ADD (). Родственная функция SUBDATE O) – это синоним DATE_SUB (). Информацию об аргументах INTERVAL можно найти в описании DATE_ADD().
mysql> SELECT DATE_ADD(‘1998-01-02’, INTERVAL 31 DAY);
-> ‘1998-02-02’ mysql> SELECT ADDDATE(‘1998-01-02’, INTERVAL 31 DAY);
-> ‘1998-02-02’
Начиная с MySQL 4.1.1, доступен второй синтаксис, где выражение – выражение типа дата или дата-время, а дни – количество дней, которые необходимо добавить к выражение.
mysql> SELECT ADDDATE(‘1998-01-02’, 31); -> ‘1998-02-02’
- ADDTIME{выражение,выражение2)
ADDTIMEO добавляет выражение2 к выражение и возвращает результат, выражение представляет собой выражение типа даты или даты-времени, а выражение2 – типа времени.
mysql> SELECT ADDTIME(‘1997-12-31 23:59:59.999999’, ‘1 1:1:1.000002’);
-> ‘1998-01-02 01:01:01.000001’
mysql> SELECT ADDTIME(’01:00:00.999999′, ’02:00:00.999998′);
-> ’03:00:01.999997′
ADDTIME O) появилась в MySQL 4.1.1.
- CURDATE()
Возвращает текущую дату в формате ‘ ГГГГ-ММ-ДД’ или ГГГГММДД, в зависимости от контекста, в котором вызывается функция – строковый или числовой.
mysql> SELECT CURDATEO; -> ‘1997-12-15’
172 Глава 5. Функции и операции
raysql> SELECT СПМАТЕО + 0;
-> 19971215
- CURRENT_DATE,CURRENT_DATE()
CURRENT_DATE И CURRENT_DATE () – ЭТО СИНОНИМЫ CURDATE ().
- CURTIME(). Возвращает текущее время в формате ‘ЧЧ:ММ:СС или ЧЧММСС, в зависимости от контекста, в котором вызывается функция – строковый или числовой.
mysql> SELECT CURTIME();
-> ’23:50:26′ mysql> SELECT CURTIME() + 0;
-> 235026
- CURRENT_TIME, CURRENT_TIME 0
- CURRENT_TIMESTAMP, CURRENT_TIMESTAMP ()
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP 0 – ЭТО СИНОНИМЫ NOW ().
- DATE (выражение). Извлекает дату из выражения выражение типа даты или даты-времени.
- DATEDIFF{выражение,выражение2)
DATEDIFFO возвращает количество дней между начальной датой выражение и конечной датой выражение2. выражение и выражение2 – это выражения типа даты или даты-времени. В вычислениях участвует только дата.
mysql> SELECT DATEDIFF(‘1997-12-31 23:59:59’,’1997-12-30‘);
-> 1
mysql> SELECT DATEDIFF(‘1997-11-30 23:59:59′,’1997-12-31’);
-> -31
DATEDIFFO появилась в MySQL 4.1.1.ш
DATE_ADD{дата, INTERVAL выражение тип) DATE_SUB(дата, INTERVAL выражениетип)
Эти функции реализуют арифметику дат. дата – это значение типа DATE или DATETIME, задающее начальную дату, выражение – выражение, задающее величину интервала, который нужно добавить или вычесть из начальной даты, выражение –это строка, которая может начинаться с ‘-‘, чтобы задавать отрицательные интервалы, тип – ключевое слово, задающее, как должно интерпретироваться выражение. Ключевое слово INTERVAL и спецификатор тип нечувствительны к регистру. В табл. 5.1 показано, как связаны аргументы тип и выражение.
Значения аргумента тип DAY_MICROSECOND, HOUR_MICROSECOND, MINUTE_MICROSECOND, SECOND_MICROSECOND и MICROSECOND доступны, начиная с версии MySQL 4.1.1. Значения QUARTER и WEEK появились в MySQL 5.O.O.
MySQL допускает любую пунктуацию разделителей в формате выражение. Та, что приведена в таблице, служит исключительно для примера. Если аргумент дата имеет тип DATE и вычисления затрагивают только год, месяц и день (то есть, не касаются времени), результат имеет тип DATE. В противном случае возвращается значение типа Datetime.
Начиная с MySQL 3.23, INTERVAL выражение тип допускается с обеих сторон операции “+”, если выражение на другой стороне имеет тип даты или даты-времени. Для операции “-” конструкция INTERVAL выражение тип разрешена только справа, поскольку нет смысла отнимать дату или время от интервала. Ниже представлены соответствующие примеры.
mysql> SELECT ‘1997-12-31 23:59:59’ + INTERVAL 1 SECOND;
-> ‘1998-01-01 00:00:00’ mysql> SELECT INTERVAL 1 DAY + ‘1997-12-31’;
-> ‘1998-01-01’ mysql> SELECT ‘1998-01-01’ – INTERVAL 1 SECOND;
-> ‘1997-12-31 23:59:59’ mysql> SELECT DATE_ADD(‘1997-12-31 23:59:59’, INTERVAL 1 SECOND);
-> ‘1998-01-01 00:00:00’ mysql> SELECT DATE_ADD(‘1997-12-31 23:59:59’, INTERVAL 1 DAY);
-> ‘1998-01-01 23:59:59′ mysql> SELECT DATE_ADD(‘1997-12-31 23:59:59’, INTERVAL ‘1:1’ MINUTE_SECOND);
-> ‘1998-01-01 00:01:00’ mysql> SELECT DATE SUB(‘1998-01-01 00:00:00’, INTERVAL ‘1 1:1:1’ DAYJSECOND);
-> ‘1997-12-30 22:58:59’ mysql> SELECT DATE_ADD(‘1998-01-01 00:00:00’, INTERVAL ‘-1 10’ DAY__HOUR);
-> ‘1997-12-30 14:00:00’
-> ‘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’
Если вы указываете слишком малое значение интервала (не включающее все части, заданные ключевым словом тип), MySQL предполагает, что в неполном значении интервала исключается левая часть. Например, если вы специфицируете тип DAY_SECOND, то ожидается, что выражение содержит дни, часы, минуты и секунды. Если вы укажете значение вроде ‘1:10′, MySQL предположит, что дни и часы пропущены, и значение представляет минуты и секунды. Другими словами, •1:10’ DAY_SECOND интерпретируется как ‘1:10’ MINUTE_SECOND. Это аналогично тому, как MySQL интерпретирует значения TIME в виде диапазона времени, а не времени дня.
Если вы добавляете или вычитаете из значения даты нечто, что содержит в себе время, результат автоматически преобразуется в значение типа даты-времени:
mysql> SELECT DATE_ADD(‘1999-01-01’, INTERVAL 1 DAY);
-> ‘1999-01-02’ mysql> SELECT DATE ADD(‘1999-01-01’, INTERVAL 1 HOUR);
-> ‘1999-01-0101:00:00’
Если вы используете неверные значения даты, результатом будет NULL. Если вы добавляете MONTH, YEAR_MONTH или YEAR, и результирующая дата имеет день, который превышает максимальное число в месяце, день исправляется на последний день месяца:
mysql> SELECT DATE_ADD(‘1998-01-30’, INTERVAL 1 MONTH); -> ‘1998-02-28’
- DATE_FORMAT {дата, формат)
- Форматирует значение дата в соответствии со строкой формат. Спецификаторы, которые могут использоваться в строке формат, представлены в табл. Все остальные символы копируются в результат без изменений. Спецификаторы формата %V, %v, %x и %х доступны, начиная с версии MySQL 3.23.8, Ы- с версии MySQL 4.1.1.
Начиная с MySQL 3.23, символ ‘%’ требуется перед символом спецификатора формата. В более ранних версиях он был не обязателен.
Причина того, что диапазоны месяцев и дней в спецификаторах начинаются с нуля, состоит в том, что MySQL, начиная с версии 3.23, допускает сохранение неполных дат, наподобие ‘2004-00-00’.
mysql> SELECT DATE_FORMAT(‘1997-10-04 22:23:00’, ‘%W %M %Y’);
-> ‘Saturday October 1997’ mysql> SELECT DATE_FORMAT(‘1997-10-04 22:23:00’, ‘%H:%i:%s’);
-> ’22:23:00′ mysql> SELECT DATE _FORMAT(‘1997-10-04 22:23:00’, ‘%D %y %a %d %m %b %j’);
-> ‘4th 97 Sat04 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 );
Таблица Спецификаторы формата
- DAY (дата)
DAY() – синоним DAYOFMONTH(). Добавлена в MySQL 4.1.1.
- DAYNAME (дата). Возвращает название дня недели для дата.
raysql> SELECT DAYNAME( ‘1998-02-05’ );
-> ‘Thursday’
mDAYOFMONTH(дата). Возвращает день месяца, соответствующий дата, в диапазоне от 1 до 31.
mysql> SELECT DAYOFMONTH (‘1998-02-03’);
-> 3
ш DAYOFWEEK (дата). Возвращает индекс дня недели для дата (1=воскресенье, 2=понедельник…, 7=суббота). Эти значения индексов соответствуют стандарту ODBC.
mysql> SELECT DAYOFWEEK(‘1998-02-03’); -> 3
- DAYOFYEAR(дата)
Возвращает день года для дата, в диапазоне от 1 до Збб.
mysql> SELECT DAYOFYEAR(‘1998-02-03’);
-> 34
- EXTRACT (wm FROM дата)
Функция EXTRACT() использует те же типы интервалов, что и DATE_ADD() или DATE_SUB (), но извлекает из дат части вместо того, чтобы выполнять арифметические действия над датами. См. информацию о значениях тип в описании
DATE_ADD().
mysql> SELECT EXTRACT(YEAR FROM ‘1999-07-02’);
-> 1999 mysql> SELECT EXTRACT(YEARJdONTH FROM ‘1999-07-02 01:02:03’);
-> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM ‘1999-07-02 01:02:03’);
-> 20102 mysql> SELECT EXTRACT(MICROSECOND FROM ‘2003-01-02 10:30:00.00123’);
-> 123
Функция EXTRACT () была добавлена в MySQL 3.23.0.
- FROM_DAYS(N). Принимает номер дня Nи возвращает дату.
mysql> SELECT FROM_DAYS(729669);
-> ‘1997-10-07’
FROM_DAYS (N) не предназначена для использования со значениями, предшествующими принятию Григорианского календаря (1582), потому что она не принимает во внимание дни, потерянные при смене календаря.
- FROMJJNIXTIME(метка_времени_ип1х) FROM_UNIXTIME (метка_времени_ип1Х, формат)
Возвращает представление аргумента метка_времени_ип1х в формате ‘ ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГГГММДДЧЧММСС, в зависимости от того, применяется функция в строковом или числовом контексте.
mysql> SELECT FROMJJNIXTIME(875996580);
-> ‘1997-10-04 22:23:00’
mysql> SELECT FROMJJNIXTIME(875996580) + 0; -> 19971004222300
Если задан аргумент формат, результат форматируется в соответствии со строкой формат. Эта строка может содержать те же спецификаторы, что и для функции
DATE_FORMAT().
mysql> SELECT FROM _UNIXTIME(UNIX_TIMESTAMP() ,’%Y %D %M %h:%i:%s %x’); -> ‘2003 6th August 06:22:58 2003’
- GET_FORMAT(DATE|TIME|TIMESTAMP, ‘EUR’|’USA’|MIS’Г ISO’ |’INTERNAL’) Возвращает строку формата. Эта функция применима в комбинации с функциями
DATE_FORMAT() И STR_TO_DATE ().
Три возможных значения первого аргумента и пять возможных значений второго дают в результате 15 комбинаций строки формата (значения спецификаторов можно найти в описании функции DATE_FORMAT ()).

Форматом ISO является ISO 9075, а не ISO 8601.
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
GET_FORMAT() доступна, начиная с MySQL 4.1.1. См. раздел 6.5.3.1.
- HOUR(время). Возвращает часы для время. Возвращаемый диапазон – от 0 до 23 для значений времени дня.
mysql> SELECT HOUR(’10:05:03′) ;
-> 10
Однако диапазон возможных значений типа TIME в настоящее время гораздо шире, поэтому HOUR может вернуть значения больше 23.
mysql> SELECT HOUR(‘272:59:59’); -> 272
- LAST_DAY (дата). Принимает значение даты или даты со временем и возвращает соответствующее значение для последнего дня месяца. Возвращает NULL, если аргумент неверный.
mysql> SELECT LASTJ)AY(‘2003-02-05’);
-> ‘2003-02-28’
mysql> SELECT LAST_DAY(‘2004-02-05’);
-> ‘2004-02-29’
mysql> SELECT LASTJ)AY(‘2004-01-01 01:01:01’);
-> ‘2004-01-31’
mysql> SELECT LAST_DAY(‘2003-03-32‘ ) ;
-> NULL
Функция LASTDAY() доступна, начиная с MySQL 4.1.1.
- LOCALTIME, LOCALTIME()
LOCALTIME и LOCALTIME() – это синонимы для NOW(). Они добавлены в MySQL 4.0.6.
- LOCALTIME STAMP, LOCALTIMESTAMP()
LOCALTIMESTAMP и LOCALTIMESTAMP() -это синонимы для NOW(). Они добавлены в MySQL 4.O.6.
- MAKEDATE(год,день__года). Возвращает дату для заданного года и дня. Значение день_года должно быть больше 0, в противном случае результатом будет NULL.
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
-> ‘2001-01-31’, ‘2001-02-01’ mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);
-> ‘2001-12-31’, ‘2004-12-30’ mysql> SELECT MAKEDATE (2001,0);
-> NULL
MAKEDATE () доступна, начиная с MySQL 4.1.1.
- MAKETIME {часы,минуты, секунды). Возвращает значение времени, вычисленное на основе аргументов часы, минуты й секунды.
mysql> SELECT MAKETIME(12,15,30); -> 42:15:30′
MAKETIME 0 доступна, начиная с MySQL 4.1.1.
- MICROSECOND{выражение)
Возвращает микросекунды, извлеченные из значения выражение времени или даты-времени, как число в диапазоне от О до 999999.
mysql> SELECT MICROSECOND(’12:00:00.123456‘);
-> 123456 mysql> SELECT MICROSECOND(‘1997-12-31 23:59:59.000010’);
-> 10
MICROSECOND () доступна, начиная с MySQL 4.1.1.
- MINUTE {время). Возвращает минуты для значения время, в диапазоне от 0 до 59.
mysql> SELECT MINUTE(’98-02-03 10:05:03′); -> 2
- MONTH {дата). Возвращает минуты для значения дата, в диапазоне от 1 до 12.
mysql> SELECT MONTH(‘1998-02-03‘); -> 2
- MONTHNAME {дата). Возвращает полное наименование месяца для значения дата.
mysql> SELECT MONTHNAME(‘1998-02-05’ ); -> ‘February’
- NOW(). Возвращает текущую дату и время в формате ‘ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГГГММДДЧЧММСС, в зависимости от того, в каком контексте вызывается функция – строковом или числовом.
mysql> SELECT NOW() ;
-> ‘1997-12-15 23:50:26’
mysql> SELECT NOW() + 0;
-> 19971215235026
- PERIOD_ADD (P, N). Добавляет N месяцев к периоду Р (в формате ГГММ или ГГГГММ).
Возвращает значение в формате ГГГГММ. Следует отметить, что аргумент периода Р—это не дата.
mysql> SELECT PERIOD_ADD (9801,2) ; -> 199803
- PERIOD_DIFF{PI,P2). Возвращает количество месяцев между периодами PI и Р2. Р1 и Р2 должны быть в формате ГГММ или ГГГГММ. Следует отметить, что аргументы периодов Р1 и Р2 — это не даты.
mysql> SELECT PERIOD_DIFF(9802,199703);
-> 11
- QUARTER {дата). Возвращает квартал года для аргумента дата, в диапазоне от 1 до 4.
mysql> SELECT QUARTER(’98-04-01′) ; -> 2
ш SECOND {время). Возвращает секунды для значения время, в диапазоне от 0 до 59.
mysql> SELECT SECOND(’10:05:03′); -> 3
- SEC_TO_TIME {секунды). Возвращает аргумент секунды, преобразованный в часы, минуты и секунды, как значение в формате ‘ЧЧ:ММ:СС или ЧЧММСС, в зависимости от того, в каком контексте вызывается функция — строковом или числовом. mysql> SELECT SEC_TO_TIME(2378);
-> ’00:39:38′ mysql> SELECT SECJTOJTIME(2378) + 0;
-> 3938
- STR_TO_DATE{строка,формат). Это функция, обратная DATE_FORMAT(). Принимает аргумент строка, строку формата формат и возвращает значение типа DATETIME.
Значения даты, времени или даты-времени, содержащиеся в аргументе строка, должны быть представлены в формате, указанном в аргументе формат. Спецификаторы
формата можно найти в описании функции DATE_FORMAT (). Все остальные символы принимаются буквально, поэтому не интерпретируются. Если строка содержит некорректную дату, время или дату и время, STR_TO_DATE () возвращает NULL.
mysql> SELECT STRJTOJDATE(‘03.10.2003 09.20’, ‘%d.%m.%Y %H.%i’);
-> ‘2003-10-03 09:20:00’ mysql> SELECT STRJTO_DATE(‘lOarp’, ‘%carp’);
-> ‘0000-10-00 00:00:00’ mysql> SELECT STRJTO_DATE(‘2003-15-10 00:00:00’, ‘%Y-%m-%d %H:%i:%s1);
-> NULL
STR_TO_DATE () доступна, начиная с MySQL 4.1.1.
- SUBDATE{дата,INTERVAL выражениетип)
SUBDATE{выражение, дни)
Когда вызывается с формой второго аргумента INTERVAL, SUBDATE () представляет собой синоним DATE_SUB(). Информация об аргументе Interval представлена в описании DATE_ADD ().
mysql> SELECT DATE SUB(‘1998-01-02 INTERVAL 31 DAY);
-> ‘1997-12-02’
mysql> SELECT SUBDATE(‘1998-01-02’, INTERVAL 31 DAY);
-> ‘1997-12-02’
Начиная с MySQL 4.1.1, допускается второй синтаксис, в котором выражение – это выражение даты или даты-времени, а дни – количество дней, которые нужно отнять от выражение.
mysql> SELECT SUBDATE(‘1998-01-02 12:00:00’, 31); -> ‘1997-12-02 12:00:00’
- SUBTIME{выражение,выражение2)
SUBTIME () отнимает выражение2 от выражение и возвращает результат, выражение -это выражение типа даты или даты и времени, а выражение2 – типа времени.
mysql> SELECT SUBTIME(‘1997-12-31 23:59:59.999999’, ‘1 1:1:1.000002’);
-> ‘1997-12-30 22:58:58.999997’
mysql> SELECT SUBTIME(’01:00:00.999999′, ’02:00:00.999998′); -> ‘-00:59:59.999999’
SUBTIME () появилась в версии MySQL 4.1.1.
- SYSDATEO
SYSDATE() -ЭТО СИНОНИМ NOW ().
- TIME {выражение). Извлекает часть, относящуюся ко времени, из выражения выражение типа времени или даты-времени.
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′
TIMEO добавлена в MySQL 4.1.1.
- TIMEDIFF {выражение, выражение2). Возвращает время между начальным моментом
- LAST_DAY (дата). Принимает значение даты или даты со временем и возвращает соответствующее значение для последнего дня месяца. Возвращает NULL, если аргумент неверный.
mysql> SELECT TIMEDIFF(‘2000:01:01 00:00:00’, ‘2000:01:01 00:00:00.000001’);
-> ‘-00:00:00.000001’ mysql> SELECT TIMEDIFF(‘1997-12-31 23:59:59.000001’,
-> ‘1997-12-30 01:01:01.000002’);
-> ’46:58:57.999999′
TIMEDIFFO появилась вMySQL4.1.1.
- TIMESTAMP{выражение)
- TIMESTAMPADD{интервал, целочисленное_выражение,выражение^ date 11те)
Добавляет целое выражение цел о численное_ выражение к выражению типа даты
или даты со временем выражение_о1а1е1ше. Единица измерения целочисленное_выражение задается аргументом интервал, которое может быть одним из следующих: FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER ИЛИ YEAR.
Значение интервал может указываться с использованием одного из приведенных выше ключевых слов или с префиксом SQL_TST_. Например, правильно и DAY, и SQL_TST_DAY. - TIW-STPiMPDIFF(интервал, Btsp3xeHHe_datetimel, Bbipa>KeHHe_datetime2)
Возвращает целочисленную разницу между выражениями типа даты или даты со
временем выражениеjdatetimelи Bbipaxcenne_datetiine2, Единица измерения задается параметром интервал. Допустимыми значениями интервал являются те же,
что и перечисленные в описании функции TIMESTAMPADD ().
mysql> SELECT TIMESTAMPDIFF (MONTH, ‘2003-02-01’ , ‘2003-05-01’) ;
-> 3 mysql> SELECT TIMESTAMPDIFF(YEAR,’2002-05-01′,’2001-01-01′);
-> -1
TIMESTAMPDIFF() добавлена в MySQL 5.0.0. - TIME FORMAT {время, формат). Эта функция используется подобно DATE_FORMAT (), но строка формат может содержать только такие спецификаторы формата, которые управляют представлением часов, минут и секунд. Все остальные спецификаторы генерируют NULL или 0.
- TIME_TO_SEC(время). Возвращает значение аргумента время, преобразованное в секунды.
- TO_DAYS {дата). Для заданной в аргументе дата значения даты возвращает номер дня (количество дней, прошедших с начала года 0).
- UNIX_TIMESTAMP()
- UTC_DATE, UTC_DATE(). Возвращает текущую дату UTC (Universal Coordinated Time – Универсальное скоординированное время) как значение в формате ‘ ГГГГ-ММ-ДД’ или ГГГГММДД, в зависимости от контекста, в котором функция вызывается.
- UTC_TIME, UTC_TIME(). Возвращает текущее время UTC (Universal Coordinated Time – Универсальное скоординированное время) как значение в формате 1ЧЧ:ММ:СС’ или ЧЧММСС, в зависимости от контекста, в котором функция вызывается.
- UTCJTIMESTAMP, UTC_TIMESTAMP(). Возвращает текущую дату и время UTC (Universal Coordinated Time – Универсальное скоординированное время) как значение в формате ‘ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГГГММДДЧЧММСС, в зависимости от контекста, в котором функция вызывается.
- WEEK {дата [, режим]). Функция возвращает номер недели для даты дата. При вызове с двумя аргументами, WEEK() позволяет указать, считать началом недели воскресенье или понедельник, и в каком диапазоне должно быть возвращаемое значение:
0-53 или 1-52. Если аргумент режим пропущен, используется значение системной переменной default_week_format (или 0 – до версии MySQL 4.0.14). В табл. 5.3 представлены допустимые значения аргумента режим вместе с описаниями их эффекта.
Таблица Допустимые значения аргумента режим
Значение режим, равное 3, может использоваться, начиная с MySQL 4.O.5. Значения от 4 и выше могут использоваться, начиная с MySQL 4.0.17.
mysql> SELECT WEEK(‘1998-02-20’);
-> 7
mysql> SELECT WEEK(‘1998-02-20’,0);
-> 7
mysql> SELECT WEEK(‘1998-02-20’ ,1);
-> 8
mysql> SELECT WEEK(‘1998-12-31’,1);
-> 53
На заметку!
В MySQL 4.0 функция WEEK {дата, 0) была изменена для соответствия календарю, принятому в США. До этого функция WEEK () вычислялась неправильно для дат США. (В результате и WEEK {дата), и WEEK {дата, 0) давали некорректные результаты во всех случаях.)
Следует отметить, что если дата приходится на последнюю неделю предыдущего года, MySQL возвращает 0, если не указано значение 2, 3, 6 или 7 для аргумента режим.
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’ - WEEKOFDAY {дата). Возвращает индекс дня недели для даты дата (0=понедельник,
1=вторник,… 6=воскресенье).
mysql> SELECT WEEKDAY(‘1998-02-03 22:23:00’);
-> 1 mysql> SELECT WEEKDAY(‘1997-11-05’);
-> 2 - WEEKOFYEAR {дата). Возвращает календарную неделю года для заданной даты дата
в диапазоне от 1 до 53.
mysql> SELECT WEEKOFYEAR(‘1998-02-20’);
-> 8
WEEKOFYEAR() доступна, начиная с MySQL 4.1.1. - YEAR {дата). Возвращает год заданной даты, в диапазоне от 1000 до 9999.
mysql> SELECT YEAR(’98-02-03′); -> 1998 - УЕАРЖЕК(дата)
YEARWEEK {дата, начало)
TIMESTAMP{выражение,выражение2)
В варианте с одним аргументом функция возвращает выражение выражение в виде даты со временем. В варианте с двумя аргументами функция добавляет выражение типа времени выражение2 к дате или дате со временем выражение, и возвращает значение типа даты со временем.
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’
TIMESTAMP () добавлена в MySQL 4.1.1.
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’
TIMESTAMPADD () появилась в MySQL 5.0.0.
Если значение время содержит часы, которые больше 23, спецификаторы формата %Н и %hгенерируют значение, не входящее в обычный диапазон от 0 до 23. Другие спецификаторы часового формата генерируют значение по модулю 12.
mysql> SELECT TIME_FORMAT(‘100:00:00’, ‘%Н %k %h %I %ll); -> ‘100 100 04 04 41
mysql> SELECT TIME_TO_SEC(’22:23:00′);
-> 80580
mysql> SELECT TIME_TO_SEC(’00:39:38′);
-> 2378
mysql> SELECT TOJDAYS(950501);
-> 728779 mysql> SELECT TOJ)AYS(‘1997-10-07’);
-> 729669
Функция TOJDAYS () не предназначена для использования со значениями, которые предшествуют дате принятие Григорианского календаря (1582), потому что не принимает во внимание дни, потерянные при смене календаря. Помните, что MySQL преобразует годы, представленные двумя цифрами, в форму с четырьмя цифрами по правилам, описанным в разделе 4.3. Например, ‘1997-10-07′ и ’97-10-07’ рассматриваются как одинаковые даты:
mysql> SELECT TOJDAYS(‘1997-10-07′), TOJDAYS(’97-10-07’);
-> 729669, 729669 Для дат ранее 1582 года результат функции не определен.
UNIX_TIMESTAMP{дата)
Если вызывается без аргументов, возвращает метку времени Unix (секунды, прошедшие с момента ‘1970-01-01 00:00:00’ GMT) в виде беззнакового целого. Если unix_timestamp о вызывается с аргументом дата, она возвращает значение аргумента в виде секунд, прошедших с момента ‘1970-01-01 00:00:00’ GMT. Аргумент дата может быть строкой DATE, строкой DATETIME, TIMESTAMP или числом в формате ГГММДД или ГГГГММДД в локальном времени.
mysql> SELECT UNIX TIMESTAMP();
-> 882226357 mysql> SELECT UNIX_TIMESTAMP(‘1997-10-04 22:23:00’);
-> 875996580
Когда UNIX_TIMESTAMP применяется со столбцом типа Timestamp, функция возвращает значение внутренней метки времени непосредственно, без неявного преобразования из строки в метку времени Unix. Если вы передаете неверную дату UNIX_TI ME STAMP, она вернет 0, однако помните, что выполняется только базовая проверка диапазона (год – от 1970 до 2037, месяц-от 01 до 12, день-от 01 до 31).
Если вам нужно извлекать столбцы с помощью UNIX_TIMESTAMP (), возможно, потребуется приводить результат к целому со знаком. См. раздел Функции приведения
mysql> SELECT UTC_DATE(), UTC _DATE() + 0; -> ‘2003-08-144 20030814 UTC_DATE () появилась в MySQL 4.1.1
mysql> SELECT UTC_TIME(), UTCJTIME() + 0;
-> ’18:07:53′, 180753
UTC_TIME() добавлена в MySQL 4.1.1.
mysql> SELECT UTCJTIMESTAMP() , UTCJTIMESTAMP() + 0; -> ‘2003-08-14 18:08:04’, 20030814180804
UTCJTIMESTAMP () появилась в MySQL 4.1.1.
-
Возвращает год и неделю для заданной даты. Аргумент начало имеет тот же смысл, что и в функции WEEK (). Год в результате может отличаться от года в аргументе дата для первой и последней недели в году.
mysql> SELECT YEARWEEK(‘1987-01-01’); -> 198653
Следует отметить, что номер недели отличается от того, который возвращает функция WEEK () (то есть 0) при значениях необязательного аргумента режим, равных 0 или 1, поскольку WEEK () возвращает неделю в контексте заданного года. YEARWEEK () была добавлена в MySQL 3.23.8.