Поиск

Функции даты и времени

В этом разделе описаны функции, которые могут использоваться для манипуляции значениями времени. В разделе 4.3 представлены диапазоны допустимых значений каж­дого типа даты и времени, а также правильные форматы, в которых они могут отобра­жаться.
Ниже приведен пример использования функций даты. Запрос выбирает все записи, у которых значение столбец_с1а Ье находится в пределах последних 30 дней:

mysql> SELECT something FROM имя_ та блицы
-> 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_TIME И CURRENT_TIME () - ЭТО СИНОНИМЫ CURTIME ().

  1. CURRENT_TIMESTAMP, CURRENT_TIMESTAMP ()
    CURRENT_TIMESTAMP, CURRENT_TIMESTAMP 0 - ЭТО СИНОНИМЫ NOW ().
  2. DATE (выражение). Извлекает дату из выражения выражение типа даты или даты-времени.
  3. 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'

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'
Если вы указываете слишком малое значение интервала (не включающее все час­ти, заданные ключевым словом тип), 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). Возвращает время между начальным моментом
выражение и конечным моментом выражение2. выражение и выражение2 — выражения типа времени или даты-времени, причем оба они должны иметь один и тот же тип.

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{выражение)
  • 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.
  • TIMESTAMPADD{интервал, целочисленное_выражение,выражение^ date 11те)
    Добавляет целое выражение цел о численное_ выражение к выражению типа даты
    или даты
    со временем выражение_о1а1е1ше. Единица измерения целочисленное_выражение задается аргументом интервал, которое может быть одним из следующих: FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER ИЛИ YEAR.
    Значение интервал может указываться с использованием одного из приведенных выше ключевых слов или с префиксом SQL_TST_. Например, правильно и DAY, и SQL_TST_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'
    TIMESTAMPADD () появилась в MySQL 5.0.0.
  • 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.
  • Если значение время содержит часы, которые больше 23, спецификаторы формата %Н и %hгенерируют значение, не входящее в обычный диапазон от 0 до 23. Другие спецификаторы часового формата генерируют значение по модулю 12.
    mysql> SELECT TIME_FORMAT('100:00:00', '%Н %k %h %I %ll); -> '100 100 04 04 41
  • TIME_TO_SEC(время). Возвращает значение аргумента время, преобразованное в секунды.
  • mysql> SELECT TIME_TO_SEC('22:23:00');
    -> 80580
    mysql> SELECT TIME_TO_SEC('00:39:38');
    -> 2378
  • TO_DAYS {дата). Для заданной в аргументе дата значения даты возвращает номер дня (количество дней, прошедших с начала года 0).
  • 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_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 (), возможно, по­требуется приводить результат к целому со знаком. См. раздел Функции приведения

  • UTC_DATE, UTC_DATE(). Возвращает текущую дату UTC (Universal Coordinated Time - Универсальное скоординированное время) как значение в формате ' ГГГГ-ММ-ДД' или ГГГГММДД, в зависимости от контекста, в котором функция вызывается.

  • mysql> SELECT UTC_DATE(), UTC _DATE() + 0; -> '2003-08-144 20030814 UTC_DATE () появилась в MySQL 4.1.1
  • UTC_TIME, UTC_TIME(). Возвращает текущее время UTC (Universal Coordinated Time - Универсальное скоординированное время) как значение в формате 1ЧЧ:ММ:СС' или ЧЧММСС, в зависимости от контекста, в котором функция вызывается.
  • mysql> SELECT UTC_TIME(), UTCJTIME() + 0;
    -> '18:07:53', 180753
    UTC_TIME() добавлена в MySQL 4.1.1.
  • UTCJTIMESTAMP, UTC_TIMESTAMP(). Возвращает текущую дату и время UTC (Universal Coordinated Time - Универсальное скоординированное время) как значение в формате 'ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГГГММДДЧЧММСС, в зависимости от контекста, в котором функция вызывается.
  • mysql> SELECT UTCJTIMESTAMP() , UTCJTIMESTAMP() + 0; -> '2003-08-14 18:08:04', 20030814180804
    UTCJTIMESTAMP () появилась в MySQL 4.1.1.
  • 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 {дата, начало)
    • Возвращает год и неделю для заданной даты. Аргумент начало имеет тот же смысл, что и в функции WEEK (). Год в результате может отличаться от года в ар­гументе дата для первой и последней недели в году.
      mysql> SELECT YEARWEEK('1987-01-01'); -> 198653

      Следует отметить, что номер недели отличается от того, который возвращает функция WEEK () (то есть 0) при значениях необязательного аргумента режим, равных 0 или 1, поскольку WEEK () возвращает неделю в контексте заданного года. YEARWEEK () была добавлена в MySQL 3.23.8.