admin / 05.12.2017
Опред | Описание |
%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’); Результат: |
EUR — европейский стандарт
USA — американский стандарт
JIS — японский индустриальный стандарт
ISO — стандарт ISO (международная организация стандартов)
INTERNAL — интернациональный стандарт
Эту функцию хорошо использовать совместно с предыдущей — DATE_FORMAT(). Посмотрим на примере: Как видите, сама функция GET_FORMAT() возвращает формат представления, а вместе с функцией DATE_FORMAT() выдает дату в нужном формате. Сделайте сами запросы со всеми пятью стандартами и посмотрите на разницу.
Previous / Next / Up / Table of Contents
Содержание
Описание диапазона величин для каждого типа и возможные форматы представления даты и времени приведены в разделе section 6.2.2 Типы данных даты и времени.
Ниже представлен пример, в котором используются функции даты. Приведенный запрос выбирает все записи с величиной в течение последних 30 дней:
mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) — TO_DAYS(date_col) <= 30;
Значение | Ожидаемый формат |
В 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 Из предыдущего примера видно, что слово и ключевое слово не являются регистро-зависимыми.
Определитель | Описание |
Название месяца (январь…декабрь) | |
Название дня недели (воскресенье…суббота) | |
День месяца с английским суффиксом (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 символ необязателен.
Если необходимо выполнить вычитание столбцов , результат можно преобразовать к целым числам со знаком.
See section 6.3.5 Функции приведения типов.
Top / Previous / Next / Up / Table of Contents
У меня возникли проблемы с поиском или выяснением того, как выводить поле даты MySQL как сокращенный день недели.
Я не уверен, делать это в MySQL или PHP.
В идеале я хотел бы сделать это с помощью функции PHP, но чтобы усложнить ситуацию, поле даты, которое я хочу вывести в качестве дня недели, выполняется через цикл while в таблицу. Это заставляет меня думать, что мне нужно сделать это в MySQL.
В принципе, я хочу иметь возможность использовать что-то вроде PHP mktime() или MySQL DAYOFWEEK(), за исключением того, что мне нужно иметь возможность сделать это в цикле while, мне нужно иметь возможность использовать переменную или столбцы имя в функции вместо того, чтобы вводить или вытаскивать одну конкретную дату для форматирования.
Любая помощь очень ценится!
P.S. Я добавил ниже, как данные в настоящее время поступают из базы данных.
### где я испытываю проблемы; это — то, где мне нужно, чтобы повторить День, используя столбец «e_date». (Следующая дата также использует столбец «e_date».)
phpmysql
задан Joshua 18 апр. '12 в 4:53
источникподелиться
База данных 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]) возвращает номер недели года.
Необязательный параметр позволяет задать стартовый день недели. Если этот параметр равен 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(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;
НазадСодержаниеВперед
.
FILED UNDER : IT