11.2 Типы данных даты и времени
версия 8.0
5.7
5.6
8,0
Японский
5.6
Японский
- 11.2.1 Синтаксис типа данных даты и времени
- 11.2.2 Типы DATE, DATETIME и TIMESTAMP
- 11.2.3 Тип TIME
- 11.2.4 Автоматизация и инициализация типа YEAR
- 3 11.2.5 Обновление для TIMESTAMP и DATETIME
- 11.2.6 Доли секунд в значениях времени
- 11.
- 11.2.8 Двузначное число лет в датах
Типы данных даты и времени для представления временных значений: ДАТА
, ВРЕМЯ
, ДАТАВРЕМЯ
, TIMESTAMP
и ГОД
. Каждый временной тип имеет
диапазон допустимых значений, а также «нулевое» значение,
может использоваться, когда вы указываете недопустимое значение, которое MySQL не может
представлять. TIMESTAMP
и Типы DATETIME
имеют специальные
поведение автоматического обновления, описанное в
Раздел 11.2.5, «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME».
Для получения информации о требованиях к хранению временных данных см. раздел 11.7, «Требования к хранению типов данных».
Описание функций, работающих с временными значениями, см. Раздел 12. 7, «Функции даты и времени».
Помните об этих общих соображениях при работе с датой. и типы времени:
MySQL извлекает значения для данного типа даты или времени в стандартный выходной формат, но он пытается интерпретировать различные форматов для входных значений, которые вы предоставляете (например, когда вы указываете значение, которое будет присвоено или сравнено с датой или тип времени). Для описания разрешенных форматов для типы даты и времени, см. Раздел 9.1.3, «Литералы даты и времени». Ожидается, что вы указываете допустимые значения. Непредсказуемые результаты могут быть получены, если вы используете значения в других форматах.
Хотя MySQL пытается интерпретировать значения в нескольких форматах, части даты всегда должны указываться в порядке год-месяц-день (для например,
'98-09-04'
), а не в обычно используются порядки месяц-день-год или день-месяц-год в другом месте (например,
,'04-09-98'
). Чтобы преобразовать строки в другие заказы в порядке год-месяц-день,STR_TO_DATE()
функция может быть полезный.Даты, содержащие двузначные значения года, неоднозначны, потому что века неизвестно. MySQL интерпретирует двузначные значения года, используя эти правила:
Преобразование значений из одного временного типа в другой происходит по правилам в Раздел 11.2.7, «Преобразование между типами даты и времени».
MySQL автоматически преобразует значение даты или времени в число если значение используется в числовом контексте и наоборот.
По умолчанию, когда MySQL встречает значение даты или времени тип, который находится вне диапазона или иным образом недействителен для типа, он преобразует значение в «нулевое» значение для тот тип.
ВРЕМЯ
значения обрезаются до соответствующую конечную точкуВРЕМЯ
диапазон.Установив режим SQL в соответствующее значение, вы можете укажите более точно, какие даты вы хотите, чтобы MySQL поддерживать. (См. Раздел 5.1.11, «Режимы SQL сервера».) Вы можете получить принять определенные даты, такие как
'2009-11-31'
, включивALLOW_INVALID_DATES
SQL режим. Это полезно, когда вы хотите сохранить «возможно неправильное» значение, которое указал пользователь (например, в веб-форме) в базе данных для дальнейшей обработки. Под этом режиме MySQL проверяет только то, что месяц находится в диапазоне от 1 до 12 и что день находится в диапазоне от 1 до 31.MySQL позволяет вам хранить даты, где день или месяц и день равен нулю в
DATE
илиДАТАВРЕМЯ
столбец. это полезно для приложений, которым необходимо хранить даты рождения, для которых вы может не знать точную дату. В этом случае вы просто сохраняете дата как
или'2009-01-00'
. Однако с такими датами, как эти, вы не должны ожидать получения правильных результатов для функции, такие какDATE_SUB()
илиDATE_ADD()
, которые требуют полные даты. Чтобы запретить нулевые части месяца или дня в датах, включитьNO_ZERO_IN_DATE
режим.MySQL позволяет вам хранить «нулевое» значение
'0000-00-00'
как «фиктивный свидание.» В некоторых случаях это удобнее, чем с использованием значений
и использует меньше данных и индексное пространство. Чтобы запретить'0000-00-00'
, включитьNO_ZERO_DATE
режим.«Нулевые» значения даты или времени, используемые через Connector/ODBC автоматически преобразуются в
NULL
, так как ODBC не может обрабатывать такие ценности.
В следующей таблице показан формат «нуля».
значение для каждого типа. «Нулевые» значения являются особыми,
но вы можете хранить или ссылаться на них явно, используя значения
показано в таблице. Вы также можете сделать это, используя значения
или 0
, что проще
написать. Для временных типов, которые включают часть даты
( ДАТА
, ДАТАВРЕМЯ
и TIMESTAMP
), использование этих значений может
выдавать предупреждения или ошибки. Точное поведение зависит от того,
если таковые имеются, строгого и NO_ZERO_DATE
Режимы SQL
включено; см. раздел 5.1.11, «Режимы SQL сервера».
НАЗАД ДОМ ВВЕРХ СЛЕДУЮЩИЙ
MySQL TIME_FORMAT() — MySQLCode
В этом руководстве мы узнаем о функции MySQL TIME_FORMAT()
. Значение времени в MySQL имеет формат «ЧЧ:ММ:СС» в 24-часовом формате.
Однако такое значение времени может быть трудночитаемым для некоторых людей, которые предпочитают 12-часовой формат, сопровождаемый AM/PM.
Некоторые люди вообще не хотят видеть значение секунд, они просто хотят видеть значение времени, которое показывает значение часов и минут. Здесь в игру вступает функция TIME_FORMAT()
.
Функция TIME_FORMAT()
форматирует значение времени в заданном формате. Вы также можете использовать MySQL TIME_FORMAT()
для значений даты и времени — однако это может привести к потере информации, поскольку TIME_FORMAT()
вернет только отформатированное значение времени и полностью пропустит значение даты.
Синтаксис MySQL TIME_FORMAT()
7 гдеЯзык кода: SQL (язык структурированных запросов) (sql)
TIME_FORMAT(время, «формат»)
«Формат» может быть одним из следующих или их комбинацией –
- %f – для отображения значения в микросекундах (от 000000 до 999999)
- %H – для отображения только значения часа в 24-часовом формате (от 00 до 23)
- %h – для отображения только значения часов в 12-часовом формате (от 00 до 12)
- %I – для отображения только значения часов в 12-часовом формате (от 00 до 12)
- % i – для отображения только значения минут (от 00 до 59)
- %p – для отображения значения AM или PM
- %r – для отображения времени в 12-часовом формате AM или PM (чч:мм:сс AM/PM)
- %S – для отображения только значения секунд (от 00 до 59)
- %s – для отображения только значение секунд (от 00 до 59)
- %T – для отображения времени в 24-часовом формате (чч:мм:сс)
Примеры MySQL TIME_FORMAT()
Давайте начнем с простого примера. Давайте отформатируем значение времени — «15:06:22», чтобы отобразить его в 12-часовом формате ЧЧ:ММ:СС и отобразить значение AM/PM. Если мы посмотрим на возможные значения «формата», мы увидим, что формат «%r» соответствует нашим потребностям. Напишем для него запрос, используя Оператор SELECT
и псевдонимы. Запрос –
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT TIME_FORMAT('15:06:22', "%r") AS Time;
И вывод –
Отображение только значения AM/PM
Для значения времени – ’15:06:22′, давайте отобразим только его значение AM или PM. Мы можем сделать это, используя формат «%p». Запрос –
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT TIME_FORMAT('15:06:22', "%p") AS Time;
И вывод –
Использование комбинации форматов
Для значения времени – ’15:06:22′, давайте отобразим время в формат «ЧЧ:ММ AM/PM». Для этого нам понадобится комбинация параметров формата. Для значений часов мы можем использовать %H. Чтобы отобразить значение минут, мы будем использовать %i, а для значения AM/PM мы будем использовать %p. Мы укажем двоеточие между %H и %i. Запрос –
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT TIME_FORMAT('15:06:22', "%H:%i %p") AS Time;
И вывод –
микросекунд С MySQL TIME_FORMAT()
Для значения времени – ’15:06:22′, давайте отобразим время в формате «ЧЧ:ММ:СС.сссссссс AM/PM». Для этого нам снова понадобится комбинация параметров формата. Для значений часов мы можем использовать %H. Чтобы отобразить значение минут, мы будем использовать %i. Чтобы отобразить значение секунд, мы будем использовать %s, а для микросекунд мы будем использовать %f. Для значения AM/PM мы будем использовать %p. Мы укажем двоеточие между %H, %i и %s и точку между %s и %f. Вопрос —
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБЕРИТЕ TIME_FORMAT('15:06:22', "%H:%i:%s.%f %p") AS Time;
Вывод –
MySQL TIME_FORMAT() с CURTIME()
Далее воспользуемся функцией CURTIME()
с MySQL TIME_FORMAT ()
. Мы будем отображать текущее время в 12-часовом формате «ЧЧ:ММ AM/PM». Запрос –
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT TIME_FORMAT(CURTIME(), "%h:%i %p") AS Time;
И вывод –
Работа с таблицами
Рассмотрим приведенную ниже таблицу автобусных остановок.
BusStop TableДавайте сделаем дату и время в приведенной выше таблице более читабельными. Давайте напишем запрос, который отображает номер автобуса, название, начальное и конечное местоположение, дату отправления и время отправления в 12-часовом формате «ЧЧ:ММ:СС AM/PM». Запрос для него —
SELECT Bus_No, Name, Start, End, ДАТА(Время отправления) КАК Дата, TIME_FORMAT(DepartureTime,"%r") AS Time FROM BusStop;
Кодовый язык: SQL (Structured Query Language) (sql)
Вывод –
Заключение
Форматирование значений времени является очень важной операцией в MySQL и широко используется во многих случаях использования – особенно когда нам нужно сделать значение времени презентабельным для пользователя. Я настоятельно рекомендую вам попрактиковаться на нескольких примерах этой функции.