admin / 05.12.2017

Тип полей DATE and TIME в MySQL — Stack Overflow на русском

  • DATE_FORMAT(date, format) форматирует дату date в соответствии с выбранным форматом formate. Эта функция очень часто используется. Например, в MySQL дата имеет формат представления YYYY-MM-DD (год-месяц-число), а нам привычнее формат DD-MM-YYYY (число-месяц-год). Поэтому для привычного нам отображения даты ее необходимо переформатировать. Давайте сначала приведем запрос, а затем разберемся, как задавать формат: Теперь дата выглядит для нас привычно. Для задания формата даты используются специальные определители. Для удобства перечислим их в таблице.
    Опред Описание
    %a Сокращенное наименование дня недели (Mon — понедельник, Tue — вторник, Wed — среда, Thu — четверг, Fri — пятница, Sat — суббота, Sun — воскресенье).

    Пример:

    SELECT DATE_FORMAT(CURDATE(), ‘%a’);

    Результат:

    %b Сокращенное наименование месяцев (Jan — январь, Feb — февраль, Mar — март, Apr — апрель, May — май, Jun — июнь, Jul — июль, Aug — август, Sep — сентябрь, Oct — октябрь, Nov — ноябрь, Dec — декабрь).

    Пример:

    SELECT DATE_FORMAT(CURDATE(), ‘%b’);

    Результат:

    %c Месяц в числовой форме (1 — 12).

    Пример:

    SELECT DATE_FORMAT(CURDATE(), ‘%с’);

    Результат:

    %d День месяца в числовой форме с нулем (01 — 31).

    Пример:

    SELECT DATE_FORMAT(CURDATE(), ‘%d’);

    Результат:

    %D День месяца в английском варианте (1st, 2nd…).

    Пример:

    SELECT DATE_FORMAT(CURDATE(), ‘%D’);

    Результат:

    %e День месяца в числовой форме без нуля (1 — 31).

    Пример:

    SELECT DATE_FORMAT(CURDATE(), ‘%e’);

    Результат:

    %H Часы с ведущим нулем от 00 до 23.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%H’);

    Результат:

    %h Часы с ведущим нулем от 00 до 12.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%h’);

    Результат:

    %i Минуты от 00 до 59.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%i’);

    Результат:

    %j День года от 001 до 366.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 23:03:20’, ‘%j’);

    Результат:

    %k Часы c ведущим нулем от 0 до 23.

    Пример:

    SELECT DATE_FORMAT(‘2011-12-31 01:03:20’, ‘%k’);

    Результат:

    %l Часы без ведущим нуля от 1 до 12.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%l’);

    Результат:

    %M Название месяца без сокращения.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%M’);

    Результат:

    %M Название месяца без сокращения.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%M’);

    Результат:

    %m Месяц в числовой форме с ведущим нулем (01 — 12).

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%m’);

    Результат:

    %p АМ или РМ для 12-часового формата.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%p’);

    Результат:

    %r Время в 12-часовом формате.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%r’);

    Результат:

    %s Секунды от 00 до 59.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 00:03:20’, ‘%s’);

    Результат:

    %T Время в 24-часовом формате.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-15 21:03:20’, ‘%T’);

    Результат:

    %u Неделя (00 — 52), где первым днем недели считается понедельник.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%u’);

    Результат:

    %U Неделя (00 — 52), где первым днем недели считается воскресенье.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%U’);

    Результат:

    %W Название дня недели без сокращения.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%W’);

    Результат:

    %w Номер дня недели (0 — воскресенье, 6 — суббота).

    Пример:

    SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%w’);

    Результат:

    %Y Год, 4 разряда.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%Y’);

    Результат:

    %y Год, 2 разряда.

    Пример:

    SELECT DATE_FORMAT(‘2011-04-17 21:03:20’, ‘%y’);

    Результат:

  • STR_TO_DATE(date, format) функция обратная предыдущей, она принимает дату date в формате format, а возвращает дату в формате MySQL. Как видите, сама функция GET_FORMAT() возвращает формат представления, а вместе с функцией DATE_FORMAT() выдает дату в нужном формате. Сделайте сами запросы со всеми пятью стандартами и посмотрите на разницу.
  • TIME_FORMAT(time, format) функция аналогична функции DATE_FORMAT(), но используется только для времени:
  • GET_FORMAT(date, format) функция возвращает строку форматирования, соответствующую одному из пяти форматов времени:

    EUR — европейский стандарт
    USA — американский стандарт
    JIS — японский индустриальный стандарт
    ISO — стандарт ISO (международная организация стандартов)
    INTERNAL — интернациональный стандарт

    Эту функцию хорошо использовать совместно с предыдущей — DATE_FORMAT(). Посмотрим на примере: Как видите, сама функция GET_FORMAT() возвращает формат представления, а вместе с функцией DATE_FORMAT() выдает дату в нужном формате. Сделайте сами запросы со всеми пятью стандартами и посмотрите на разницу.

  • Previous / Next / Up / Table of Contents

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

    Описание диапазона величин для каждого типа и возможные форматы представления даты и времени приведены в разделе section 6.2.2 Типы данных даты и времени.

    Ниже представлен пример, в котором используются функции даты. Приведенный запрос выбирает все записи с величиной в течение последних 30 дней:

    mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) — TO_DAYS(date_col) <= 30;

    Возвращает индекс дня недели для аргумента (1 = воскресенье, 2 = понедельник, … 7 = суббота). Эти индексные величины соответствуют стандарту ODBC: mysql> SELECT DAYOFWEEK(‘1998-02-03’); -> 3
    Возвращает индекс дня недели для аргумента date (0 =понедельник, 1 = вторник, … 6 = воскресенье): mysql> SELECT WEEKDAY(‘1997-10-04 22:23:00’); -> 5 mysql> SELECT WEEKDAY(‘1997-11-05’); -> 2
    Возвращает порядковый номер дня месяца для аргумента в диапазоне от 1 до 31: mysql> SELECT DAYOFMONTH(‘1998-02-03’); -> 3
    Возвращает порядковый номер дня года для аргумента в диапазоне от 1 до 366: mysql> SELECT DAYOFYEAR(‘1998-02-03’); -> 34
    Возвращает порядковый номер месяца в году для аргумента в диапазоне от 1 до 12: mysql> SELECT MONTH(‘1998-02-03’); -> 2
    Возвращает название дня недели для аргумента : mysql> SELECT DAYNAME(«1998-02-05»); -> ‘Thursday’
    Возвращает название месяца для аргумента : mysql> SELECT MONTHNAME(«1998-02-05»); -> ‘February’
    Возвращает номер квартала года для аргумента в диапазоне от 1 до 4: mysql> SELECT QUARTER(’98-04-01′); -> 2
    При наличии одного аргумента возвращает порядковый номер недели в году для в диапазоне от 0 до 53 (да, возможно начало 53-й недели) для регионов, где воскресенье считается первым днем недели. Форма с двумя аргументами позволяет уточнить, с какого дня начинается неделя — с воскресенья или с понедельника. Неделя начинается с воскресенья, если второй аргумент равен 0, и с понедельника — если 1: 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 Примечание: в версии 4.0 функция была изменена с целью соответствия календарю США.
    Возвращает год для аргумента в диапазоне от 1000 до 9999: mysql> SELECT YEAR(’98-02-03′); -> 1998
    Возвращает год и неделю для аргумента . Второй аргумент в данной функции работает подобно второму аргументу в функции . Следует учитывать, что год может отличаться от указанного в аргументе для первой и последней недель года: mysql> SELECT YEARWEEK(‘1987-01-01’); -> 198653
    Возвращает час для аргумента в диапазоне от 0 до 23: mysql> SELECT HOUR(’10:05:03′); -> 10
    Возвращает количество минут для аргумента в диапазоне от 0 до 59: mysql> SELECT MINUTE(’98-02-03 10:05:03′); -> 5
    Возвращает количество секунд для аргумента в диапазоне от 0 до 59: mysql> SELECT SECOND(’10:05:03′); -> 3
    Добавляет месяцев к периоду (в формате или ). Возвращает величину в формате . Следует учитывать, что аргумент периода не является значением даты: mysql> SELECT PERIOD_ADD(9801,2); -> 199803
    Возвращает количество месяцев между периодами и . и должны быть в формате или . Следует учитывать, что аргументы периода и не являются значениями даты: mysql> SELECT PERIOD_DIFF(9802,199703); -> 11
    Данные функции производят арифметические действия над датами. Обе являются нововведением версии MySQL 3.22. Функции и — синонимы для и . В версии MySQL 3.23 вместо функций и можно использовать операторы и , если выражение с правой стороны представляет собой столбец типа или (см. пример ниже). Аргумент является величиной типа или , задающей начальную дату. Выражение задает величину интервала, который следует добавить к начальной дате или вычесть из начальной даты. Выражение представляет собой строку, которая может начинаться с для отрицательных значений интервалов. Ключевое слово показывает, каким образом необходимо интерпретировать данное выражение. Вспомогательная функция возвращает интервал указанного типа () из значения даты. В следующей таблице показана взаимосвязь аргументов и :

    Значение Ожидаемый формат

    В MySQL формат выражения допускает любые разделительные знаки. Разделители, представленные в данной таблице, приведены в качестве примеров. Если аргумент является величиной типа и предполагаемые вычисления включают в себя только части , , и (т.е. не содержат временной части ), то результат представляется величиной типа . В других случаях результат представляет собой величину : 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» DAY_SECOND); -> 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 предполагает, что опущены крайние слева части интервала. Например, если указан аргумент в виде , то ожидаемое выражение должно иметь следующие части: дни, часы, минуты и секунды. Если в этом случае указать значение интервала в виде , то MySQL предполагает, что опущены дни и часы, а данная величина включает только минуты и секунды. Другими словами, сочетание интерпретируется как эквивалент . Аналогичным образом в MySQL интерпретируются и значения — скорее как представляющие прошедшее время, чем как время дня. Следует учитывать, что при операциях сложения или вычитания с участием величины и выражения, содержащего временную часть, данная величина будет автоматически конвертироваться в величину типа : 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-01 01:00:00 При использовании некорректных значений дат результат будет равен . Если при суммировании , или номер дня в результирующей дате превышает максимальное количество дней в новом месяце, то номер дня результирующей даты принимается равным последнему дню нового месяца: mysql> SELECT DATE_ADD(‘1998-01-30’, INTERVAL 1 MONTH); -> 1998-02-28 Из предыдущего примера видно, что слово и ключевое слово не являются регистро-зависимыми.

    Типы интервалов для функции используются те же, что и для функций или , но производит скорее извлечение части из значения даты, чем выполнение арифметических действий. mysql> SELECT EXTRACT(YEAR FROM «1999-07-02»); -> 1999 mysql> SELECT EXTRACT(YEAR_MONTH FROM «1999-07-02 01:02:03»); -> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM «1999-07-02 01:02:03»); -> 20102
    функция возвращает номер дня для даты, указанной в аргументе , (количество дней, прошедших с года 0): mysql> SELECT TO_DAYS(950501); -> 728779 mysql> SELECT TO_DAYS(‘1997-10-07’); -> 729669 Функция не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку не учитывает дни, утерянные при изменении календаря.
    Возвращает величину для заданного номера дня : mysql> SELECT FROM_DAYS(729669); -> ‘1997-10-07’ Функция не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку она не учитывает дни, утерянные при изменении календаря.
    Форматирует величину в соответствии со строкой . В строке могут использоваться следующие определители:

    Определитель Описание
    Название месяца (январь…декабрь)
    Название дня недели (воскресенье…суббота)
    День месяца с английским суффиксом (1st, 2nd, 3rd и т.д.)
    Год, число, 4 разряда
    Год, число, 2 разряда
    Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%V’
    Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%v’
    Сокращенное наименование дня недели (Вс…Сб)
    День месяца, число (00..31)
    День месяца, число (0..31)
    Месяц, число (01..12)
    Месяц, число (1..12)
    Сокращенное наименование месяца (Янв…Дек)
    День года (001..366)
    Час (00..23)
    Час (0..23)
    Час (01..12)
    Час (01..12)
    Час (1..12)
    Минуты, число (00..59)
    Время, 12-часовой формат (hh:mm:ss [AP]M)
    Время, 24-часовой формат (hh:mm:ss)
    Секунды (00..59)
    Секунды (00..59)
    AM или PM
    День недели (0=воскресенье..6=суббота)
    Неделя (00..53), где воскресенье считается первым днем недели
    Неделя (00..53), где понедельник считается первым днем недели
    Неделя (01..53), где воскресенье считается первым днем недели. Используется с
    Неделя (01..53), где понедельник считается первым днем недели. Используется с
    Литерал .

    Все другие символы просто копируются в результирующее выражение без интерпретации: 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 Sat 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 3.23 символ должен предшествовать символам определителя формата. В более ранних версиях MySQL символ необязателен.

    Данная функция используется аналогично описанной выше функции , но строка может содержать только те определители формата, которые относятся к часам, минутам и секундам. При указании других определителей будет выдана величина или .
    Возвращает сегодняшнюю дату как величину в формате или , в зависимости от того, в каком контексте используется функция — в строковом или числовом: mysql> SELECT CURDATE(); -> ‘1997-12-15’ mysql> SELECT CURDATE() + 0; -> 19971215
    Возвращает текущее время как величину в формате или , в зависимости от того, в каком контексте используется функция — в строковом или числовом: mysql> SELECT CURTIME(); -> ’23:50:26′ mysql> SELECT CURTIME() + 0; -> 235026
    Возвращает текущую дату и время как величину в формате или , в зависимости от того, в каком контексте используется функция — в строковом или числовом: mysql> SELECT NOW(); -> ‘1997-12-15 23:50:26’ mysql> SELECT NOW() + 0; -> 19971215235026
    При вызове данной функции без аргумента она возвращает временную метку (секунды с 1970-01-01 00:00:00 GMT) как беззнаковое целое число. Если функция вызывается с аргументом , она возвращает величину аргумента как количество секунд с 1970-01-01 00:00:00 GMT. Аргумент date может представлять собой строку типа , строку , величину типа или число в формате или местного времени: mysql> SELECT UNIX_TIMESTAMP(); -> 882226357 mysql> SELECT UNIX_TIMESTAMP(‘1997-10-04 22:23:00’); -> 875996580 При использовании функции в столбце эта функция будет возвращать величину внутренней временной метки непосредственно, без подразумеваемого преобразования строки во временную метку («string-to-unix-timestamp» ). Если заданная дата выходит за пределы допустимого диапазона, то функция возвратит , но следует учитывать, что выполняется только базовая проверка (год 1970-2037, месяц 01-12, день 01-31).

    Если необходимо выполнить вычитание столбцов , результат можно преобразовать к целым числам со знаком.

    MYSQL функции форматирования даты и времени

    See section 6.3.5 Функции приведения типов.

    Возвращает представление аргумента как величину в формате или , в зависимости от того, в каком контексте используется функция — в строковом или числовом: mysql> SELECT FROM_UNIXTIME(875996580); -> ‘1997-10-04 22:23:00’ mysql> SELECT FROM_UNIXTIME(875996580) + 0; -> 19971004222300
    Возвращает строковое представление аргумента , отформатированное в соответствии со строкой . Строка может содержать те же определители, которые перечислены в описании для функции : mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), ‘%Y %D %M %h:%i:%s %x’); -> ‘1997 23rd December 03:43:30 1997’
    Возвращает аргумент seconds, преобразованный в часы, минуты и секунды, как величину в формате или , в зависимости от того, в каком контексте используется функция — в строковом или числовом: mysql> SELECT SEC_TO_TIME(2378); -> ’00:39:38′ mysql> SELECT SEC_TO_TIME(2378) + 0; -> 3938
    Возвращает аргумент , преобразованный в секунды: mysql> SELECT TIME_TO_SEC(’22:23:00′); -> 80580 mysql> SELECT TIME_TO_SEC(’00:39:38′); -> 2378

    Top / Previous / Next / Up / Table of Contents

    У меня возникли проблемы с поиском или выяснением того, как выводить поле даты MySQL как сокращенный день недели.

    Я не уверен, делать это в MySQL или PHP.

    В идеале я хотел бы сделать это с помощью функции PHP, но чтобы усложнить ситуацию, поле даты, которое я хочу вывести в качестве дня недели, выполняется через цикл while в таблицу. Это заставляет меня думать, что мне нужно сделать это в MySQL.

    В принципе, я хочу иметь возможность использовать что-то вроде PHP mktime() или MySQL DAYOFWEEK(), за исключением того, что мне нужно иметь возможность сделать это в цикле while, мне нужно иметь возможность использовать переменную или столбцы имя в функции вместо того, чтобы вводить или вытаскивать одну конкретную дату для форматирования.

    Любая помощь очень ценится!

    P.S. Я добавил ниже, как данные в настоящее время поступают из базы данных.

    Работа с датой и временем в MySQL

    ### где я испытываю проблемы; это — то, где мне нужно, чтобы повторить День, используя столбец «e_date». (Следующая дата также использует столбец «e_date».)

    phpmysql

    задан Joshua 18 апр. '12 в 4:53

    источникподелиться

    Преобразование даты в mysql с помощью DATE_FORMAT()

    База данных MySQL содержит набор функций для работы с датами, которые упрощают выборку данных из базы и помогают представить результат выборки в удобном для разработчика виде.

    Формат даты

    Прежде чем перейти к функциям, рассмотрим формат даты используемый в MySQL. Формат несколько необычен, и отличается от того который мы видим в повседневной жизни:

    YYYY-MM-DD2012-08-18

     

    Текущая дата

    Первая функция, с которой я хотел бы начать это CURDATE(), возвращает текущую дату в формате MySQL.

    SELECT CURDATE(); //Результат «2012-08-19»

     

    Разбиение даты на фрагменты

    В этой части представлены функции, которые разбивают стандартную дату, формата MySQL на составляющие, т.

    е. год, месяц, день.

    YEAR() – выбор года из даты:

    SELECT YEAR(«2012-08-19»); //Результат «2012»

    MONTH() или MONTHNAME() – выбор месяца из даты, первая функция — цифровое значение месяца, вторая его название:

    SELECT MONTH(«2012-08-19»); //Результат "8"SELECT MONTHNAME(«2012-08-19»); //Результат «August»

    DAYOFMONTH() – выбор дня из даты:

    SELECT DAYOFMONTH(«2012-08-19»); //Результат «19»

     

    Прибавление и вычитание из даты временного интервала

    В наличие MySQL есть две функция, применяя которые Вы можете отнимать или прибавлять к указанной дате какой-то временной интервал.

    DATE_ADD() – прибавляет к дате временной промежуток;

    SELECT DATE_ADD(«2012-08-19»,Interval 20 DAY); //Результат «2012-09-08″SELECT DATE_ADD(«2012-08-19»,Interval 2 MONTH);//Результат «2012-10-19″SELECT DATE_ADD(«2012-08-19»,Interval 3 YEAR); //Результат «2015-08-19»

    Из представленных запросов видно: в первом к текущей дате прибавляются 20 дней, во втором два месяца, в третьем 3 года. 

    DATE_SUB() – вычитает из даты временной промежуток, работает аналогично функции DATE_ADD();

    SELECT DATE_SUB(«2012-08-19»,Interval 20 DAY);SELECT DATE_SUB(«2012-08-19»,Interval 2 MONTH);SELECT DATE_SUB(«2012-08-19»,Interval 3 YEAR);

     

    Преобразование даты в дни

    Когда необходимо произвести арифметические действия над датами, например, сложить их или вычесть одну из другой, Вам понадобится функция TO_DAYS(). Функция преобразовывает дату в дни.

    SELECT TO_DAYS(«2012-08-31»)-TO_DAYS(«2012-08-16»); //Результат «15»

     

    Пример

    Рассмотрим небольшой пример, который включает в себя все раннее представленные функции. Предположим, в базе существует таблица clients, в которой ведется учет постояльцев гостиницы.

     

    Необходимо отобрать всех клиентов, у которых заканчивается срок пребывания в течение 5 дней, начиная с текущей даты (2012-08-19).

    SELECT  clients.firstname,  clients.lastname,  clients.dateout FROM clients WHERE  clients.dateout>=CURDATE() and  clients.dateout<=DATE_ADD(CURDATE(),Interval 5 DAY)

     

    Запрос выполнен успешно, нужные клиенты и их данные отображены. Однако полученные данные не совсем полны и к тому же не очень удобные для пользователя. Немного усовершенствовав запрос можно получить более подробный и удобочитаемый результат.

    SELECT  CONCAT(firstname,» «,lastname) as client,  CONCAT(DAYOFMONTH(datein),» «,MONTHNAME(datein),» «,YEAR(datein)) as datein,  CONCAT(DAYOFMONTH(CURDATE()),» «,MONTHNAME(CURDATE()),» «,YEAR(CURDATE())) as curdate,  CONCAT(«выезд через «,TO_DAYS(dateout)-TO_DAYS(CURDATE()),» дня») as dateout FROM clients WHERE  dateout>=CURDATE() and  dateout<=DATE_ADD(CURDATE(),Interval 5 DAY) ORDER BY client

     

    В запросе была использована дополнительная функция CONCAT(), позволяющая объединить отдельные элементы в единую строковую конструкцию.

    Функции для работы с датами и временем

    Последнее обновление: 26.05.2018

    MySQL имеет ряд встроенных функций для работы с датами и временем.

    Получение даты и времени

    • Функции NOW(), SYSDATE(), CURRENT_TIMESTAMP() возвращают текущую локальную дату и время на основе системных часов в виде объекта datetime. Все три функции возвращают одинаковый результат

      SELECT NOW(); — 2018-05-25 21:34:55 SELECT SYSDATE(); — 2018-05-25 21:34:55 SELECT CURRENT_TIMESTAMP(); — 2018-05-25 21:32:55

    • Функции CURDATE и CURRENT_DATE возвращают текущую локальную дату в виде объекта date:

      SELECT CURRENT_DATE(); — 2018-05-25 SELECT CURDATE(); — 2018-05-25

    • Функции CURTIME и CURRENT_TIME возвращают текущее время в виде объекта time:

      SELECT CURRENT_TIME(); — 20:47:45 SELECT CURTIME(); — 20:47:45

    • UTC_DATE возвращает текущую локальную дату относительно GMT

      SELECT UTC_DATE(); — 2018-05-25

    • UTC_TIME возвращает текущее локальное время относительно GMT

      SELECT UTC_TIME(); — 17:47:45

    Парсинг даты и времени

    • DAYOFMONTH(date) возвращает день месяца в виде числового значения

    • DAYOFWEEK(date) возвращает день недели в виде числового значения

    • DAYOFYEAR(date) возвращает номер дня в году

    • MONTH(date) возвращает месяц даты

    • YEAR(date) возвращает год из даты

    • QUARTER(date) возвращает номер квартала года

    • WEEK(date [, first]) возвращает номер недели года.

      Работа с датой и временем в MySQL+PHP

      Необязательный параметр позволяет задать стартовый день недели. Если этот параметр равен 1, то первым днем считается понедельник, иначе воскресенье

    • LAST_DAY(date) возвращает последний день месяца в виде даты

    • DAYNAME(date) возвращает название дня недели

    • MONTHNAME(date) возвращает название текущего месяца

    • HOUR(time) возвращает час времени

    • MINUTE(time) возвращает минуту времени

    • SECOND(time) возвращает секунду времени

    Примеры функций:

    Функция

    Результат

    DAYOFMONTH(‘2018-05-25’)

    25

    DAYOFWEEK(‘2018-05-25’)

    6

    DAYOFYEAR(‘2018-05-25’)

    145

    MONTH(‘2018-05-25’)

    5

    YEAR(‘2018-05-25’)

    2018

    QUARTER(‘2018-05-25’)

    2

    WEEK(‘2018-05-25’, 1)

    21

    LAST_DAY(‘2018-05-25’)

    2018-05-31

    DAYNAME(‘2018-05-25’)

    Friday

    MONTHNAME(‘2018-05-25’)

    May

    HOUR(’21:25:54′)

    21

    MINUTE(’21:25:54′)

    25

    SECOND(’21:25:54′)

    54

    Функция EXTRACT

    Функция EXTRACT извлекает из даты и времени какой-то определенный компонент. Ее формальный синтаксис:

    EXTRACT(unit FROM datetime)

    Значение datetime представляет исходную дату и (или) время, а значение unit указывает, какой компонент даты или времени будет извлекаться. Параметр unit может представлять одно из следующих значений:

    • (секунды)

    • (минуты)

    • (час)

    • (день)

    • (месяц)

    • (год)

    • (минуты и секунды)

    • (часы и минуты)

    • (день и часы)

    • (год и месяц)

    • (часы, минуты и секунды)

    • (день, часы и минуты)

    • (день, чаы, минуты и секунды)

    Примеры вызова функции:

    Вызов

    Результат

    EXTRACT( SECOND FROM ‘2018-05-25 21:25:54’)

    54

    EXTRACT( MINUTE FROM ‘2018-05-25 21:25:54’)

    25

    EXTRACT( HOUR FROM ‘2018-05-25 21:25:54’)

    21

    EXTRACT( DAY FROM ‘2018-05-25 21:25:54’)

    25

    EXTRACT( MONTH FROM ‘2018-05-25 21:25:54’)

    5

    EXTRACT( YEAR FROM ‘2018-05-25 21:25:54’)

    2018

    EXTRACT( MINUTE_SECOND FROM ‘2018-05-25 21:25:54’)

    2554

    EXTRACT( DAY_HOUR FROM ‘2018-05-25 21:25:54’)

    2521

    EXTRACT( YEAR_MONTH FROM ‘2018-05-25 21:25:54’)

    201805

    EXTRACT( HOUR_SECOND FROM ‘2018-05-25 21:25:54’)

    212554

    EXTRACT( DAY_MINUTE FROM ‘2018-05-25 21:25:54’)

    252125

    EXTRACT( DAY_SECOND FROM ‘2018-05-25 21:25:54’)

    25212554

    Функции для манипуляции с датами

    Ряд функций позволяют производить операции сложения и вычитания с датами и временем:

    • DATE_ADD(date, INTERVAL expression unit) возвращает объект DATE или DATETIME, который является результатом сложения даты date с определенным временным интервалом. Интервал задается с помощью выражения , где предоставляет ключевое слово, — количество добавляемых к дате единиц, а — тип единиц (часы, дни и т.д.) Параметр может иметь те же значения, что и в функции EXTRACT, то есть DAY, HOUR и т.д.

    • DATE_SUB(date, INTERVAL expression unit) возвращает объект DATE или DATETIME, который является результатом вычитания из даты date определенного временного интервала

    • DATEDIFF(date1, date2) возвращает разницу в днях между датами date1 и date2

    • TO_DAYS(date) возвращает количество дней с 0-го года

    • TIME_TO_SEC(time) возвращает количество секунд, прошедших с момента полуночи

    Примеры применения:

    Вызов

    Результат

    DATE_ADD(‘2018-05-25’, INTERVAL 1 DAY)

    2018-05-26

    DATE_ADD(‘2018-05-25’, INTERVAL 3 MONTH)

    2018-08-25

    DATE_ADD(‘2018-05-25 21:31:27’, INTERVAL 4 HOUR)

    2018-05-26 01:31:27

    DATE_SUB(‘2018-05-25’, INTERVAL 4 DAY)

    2018-05-21

    DATEDIFF(‘2018-05-25’, ‘2018-05-27’)

    -2

    DATEDIFF(‘2018-05-25’, ‘2018-05-21’)

    4

    DATEDIFF(‘2018-05-25’, ‘2018-03-21’)

    65

    TO_DAYS(‘2018-05-25’)

    737204

    TIME_TO_SEC(’10:00′)

    36000

    Форматирование дат и времени

    • DATE_FORMAT(date, format) возвращает объект DATE или DATETIME, отформатированный с помощью шаблона format

    • TIME_FORMAT(date, format) возвращает объект TIME или DATETIME, отформатированный с помощью шаблона format

    Обе функции в качестве второго параметра принимают строку форматирования или шаблон, который показывает, как оформатировать значение. Этот шаблон может принимать следующие значения:

    • : месяц в числовом формате 01..12

    • : месяц в числовом формате 1..12

    • : название месяца (January…December)

    • : аббревиатура месяца (Jan…Dec)

    • : день месяца в числовом формате 00..31

    • : день месяца в числовом формате 0..31

    • : номер дня месяца с суффиксом (1st, 2nd, 3rd…)

    • : год в виде двух чисел

    • : год в виде четырех чисел

    • : название дня недели (Sunday…Saturday)

    • : аббревиатура дня недели (Sun…Sat)

    • : час в формате 00..23

    • : час в формате 0..23

    • : час в формате 01..12

    • : час в формате 1..12

    • : минуты в формате 00..59

    • : время в 12-ти часовом формате (hh:mm:ss AM или PM)

    • : время в 24-ти часовом формате (hh:mm:ss)

    • : секунды в формате 00..59

    • : AM или PM

    Примеры применения:

    Вызов

    Результат

    DATE_FORMAT(‘2018-05-25’, ‘%d/%m/%y’)

    25/05/18

    DATE_FORMAT(‘2018-05-25 21:25:54’, ‘%d %M %Y’)

    25 May 2018

    DATE_FORMAT(‘2018-05-25 21:25:54’, ‘%r’)

    09:25:54 PM

    TIME_FORMAT(‘2018-05-25 21:25:54’, ‘%H:%i:%S’)

    21:25:24

    TIME_FORMAT(’21:25:54′, ‘%k:%i’)

    21:25

    В качестве примера использования функций найдем заказы, которые были сделаны 5 дней назад:

    SELECT * FROM Orders WHERE DATEDIFF(CURDATE(), CreatedAt) = 5;

    НазадСодержаниеВперед

    MySQL функция DATE_FORMAT

    .

    FILED UNDER : IT

    Submit a Comment

    Must be required * marked fields.

    :*
    :*