Что такое timestamp в sql
Перейти к содержимому

Что такое timestamp в sql

  • автор:

TIMESTAMP Тип

Представляет значения, состоящие из значений полей year, month, day, hour, minute и second, с локальным часовом поясом сеанса. Значение метки времени представляет абсолютную точку во времени.

Синтаксис

TIMESTAMP 

Ограничения

Диапазон поддерживаемых меток времени — June 23 -5877641 CE July 11 +5881580 CE .

Литералы

TIMESTAMP timestampString timestampString
  • + или — : необязательный знак. — указывает BCE, + указывает CE (по умолчанию).
  • yyyy : год, состоящий не менее четырех цифр.
  • [m]m : месяц с одной или двумя цифрами от 01 до 12.
  • [d]d : день с одной или двумя цифрами от 01 до 31.
  • h[h] : час с одной или двумя цифрами от 00 до 23.
  • m[m] : одна или две цифры минуты от 00 до 59.
  • s[s] : одна или две цифры секунды от 00 до 59.
  • [ms][ms][ms][us][us][us] : до 6 цифр долей секунды.
  • Часовой пояс Zulu (UTC+0)
  • +|-[h]h:[m]m
  • Идентификатор с одним из префиксов UTC+, UTC-, GMT+, GMT-, UT+ или UT-, и суффиксом в форматах:
    • +|-h[h]
    • +|-hh[:]mm
    • +|-чч:мм:сс
    • +|-hhmmss

    Если компоненты месяца или дня не указаны, по умолчанию используется значение 1. Если не указаны компоненты hour, minute или second, они по умолчанию имеют значение 0. Если параметр не zoneId указан, по умолчанию используется часовой пояс сеанса.

    Если литерал представляет правильную метку времени, Azure Databricks вызывает ошибку.

    Примечания

    Метки времени с локальным часовыми поясами внутренне нормализуются и сохраняются в формате UTC. При извлечении значения или его части применяется часовой пояс локального сеанса.

    Примеры

    > SELECT TIMESTAMP'0000'; 0000-01-01 00:00:00 > SELECT TIMESTAMP'2020-12-31'; 2020-12-31 00:00:00 > SELECT TIMESTAMP'2021-7-1T8:43:28.123456'; 2021-07-01 08:43:28.123456 > SELECT current_timezone(), TIMESTAMP'2021-7-1T8:43:28UTC+3'; America/Los_Angeles 2021-06-30 22:43:28 > SELECT CAST('1908-03-15 10:1:17' AS TIMESTAMP) 1908-03-15 10:01:17 > SELECT TIMESTAMP'+10000'; +10000-01-01 00:00:00 

    Datetime или timestamp

    На днях я столкнулся с тем, что многие разработчики не знают в чём отличие типов данных DATETIME и TIMESTAMP в MySQLе, а так же как хранить дату и время, если необходимо учитывать разные часовые пояса для разных пользователей веб-приложения. Поэтому хочу дать ниже разъяснения с пояснениями.

    DATETIME
    Хранит время в виде целого числа вида YYYYMMDDHHMMSS, используя для этого 8 байтов. Это время не зависит от временной зоны. Оно всегда отображается при выборке точно так же, как было сохранено, независимо от того какой часовой пояс установлен в MySQL. Даю пример:

    mysql> create table `dt1` ( col datetime NOT NULL );
    mysql> SET @@session.time_zone=’+00:00′;
    mysql> select now();
    +———————+
    | now() |
    +———————+
    | 2009-06-04 18:13:56 |
    +———————+

    mysql> insert into dt1 values(now());

    mysql> insert into dt1 values(now());

    TIMESTAMP
    Хранит 4-байтное целое число, равное количеству секунд, прошедших с полуночи 1 января 1970 года по усреднённому времени Гринвича (т.е. нулевой часовой пояс, точка отсчёта часовых поясов). При получении из базы отображается с учётом часового пояса. Часовой пояс может быть задан в операционной системе, глобальных настройках MySQL или в конкретной сессии. Запомните, что сохраняется всегда количество секунд по UTC (универсальное координированное время, солнечное время на меридиане Гринвича), а не по локальному часовому поясу. Пример:

    Ещё одно отличие! TIMESTAMP по умолчанию NOT NULL, а его значение по умолчанию равно NOW().

    mysql> insert into dt1 values(null);
    ERROR 1048 (23000): Column ‘col’ cannot be null
    mysql> insert into tm1 values(null);
    Query OK, 1 row affected (0.00 sec)
    mysql> select * from tm1;
    +———————+
    | col |
    +———————+
    | 2009-06-04 18:25:08 |
    | 2009-06-04 18:25:26 |
    | 2009-06-04 18:32:50 |
    +———————+

    Дополнение. Для тех, кого смущает использование функции NOW().

    mysql> set @@session.time_zone = ‘+00:00’;
    mysql> insert into dt1 values(‘2009-06-04 22:00:00’);
    mysql> set @@session.time_zone = ‘+01:00’;
    mysql> select * from dt1;
    +———————+
    | col |
    +———————+
    | 2009-06-04 22:00:00 |
    +———————+

    mysql> set @@session.time_zone = ‘+00:00’;
    mysql> insert into tm1 values(‘2009-06-04 22:00:00’);
    mysql> set @@session.time_zone = ‘+01:00’;
    mysql> select * from tm1;
    +———————+
    | col |
    +———————+
    | 2009-06-04 23:00:00 |
    +———————+

    Как timestamp перевести в дату sql

    Чтобы перевести timestamp в дату в SQL, вы можете использовать функцию DATEFROMPARTS() . Функция DATEFROMPARTS() создает дату из трех параметров: года, месяца и дня. Для получения этих параметров из timestamp можно использовать функции YEAR() , MONTH() и DAY() , соответственно.

    Например, предположим, что у вас есть столбец timestamp_column типа timestamp, и вы хотите преобразовать его в дату. Используйте следующий запрос:

    SELECT DATEFROMPARTS(YEAR(timestamp_column), MONTH(timestamp_column), DAY(timestamp_column)) AS date_column FROM my_table; 

    Здесь timestamp_column — это название столбца, который содержит timestamp, который вы хотите преобразовать в дату, а date_column — это название столбца, в который будет помещен результат преобразования.

    Обратите внимание, что timestamp в SQL представляет собой количество секунд, прошедших с начала эпохи (обычно 1 января 1970 года). При преобразовании timestamp в дату необходимо учитывать эту особенность.

    Типы данных и функции даты и времени (Transact-SQL)

    В разделах этой статьи представлен обзор всех типов данных и функций даты и времени Transact-SQL.

    • Типы данных даты и времени
    • Функции даты и времени
      • Функции, возвращающие значения системной даты и времени
      • Функции, возвращающие компоненты даты и времени
      • Функции, возвращающие значения даты и времени из их компонентов
      • Функции, возвращающие значения разности даты и времени
      • Функции, изменяющие значения даты и времени
      • Функции, устанавливающие или возвращающие функции формата сеанса
      • Функции, проверяющие значения даты и времени

      Типы данных даты и времени

      Типы данных даты и времени Transact-SQL перечислены в следующей таблице:

      Тип данных Формат Диапазон Точность Объем памяти (в байтах) Определяемая пользователем точность в долях секунды Смещение часового пояса
      time чч:мм:сс[.ннннннн] От 00:00:00.0000000 до 23:59:59.9999999 100 наносекунд от 3 до 5 Да Нет
      date ГГГГ-ММ-ДД От 0001-01-01 до 31.12.99 1 день 3 Нет Нет
      smalldatetime ГГГГ-ММ-ДД чч:мм:сс От 01.01.1900 до 06.06.2079 1 минута 4 нет Нет
      datetime ГГГГ-ММ-ДД чч:мм:сс[.ннн] От 01.01.1753 до 31.12.9999 0,00333 секунды 8 Нет Нет
      datetime2 ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 100 наносекунд От 6 до 8 Да Нет
      datetimeoffset ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:мм От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 (время в формате UTC) 100 наносекунд От 8 до 10 Да Да

      Тип данных Transact-SQL rowversion не относится к типам данных даты и времени. Тип данных timestamp является устаревшим синонимом rowversion.

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

      В следующих таблицах приводятся функции даты и времени Transact-SQL. Дополнительные сведения о детерминизме см. в статье Детерминированные и недетерминированные функции.

      Функции, возвращающие значения системной даты и времени

      Transact-SQL наследует все значения системной даты и времени от операционной системы компьютера, на котором работает экземпляр SQL Server.

      Высокоточные функции системной даты и времени

      Начиная с SQL Server 2008 (10.0.x) ядро СУБД получает значения даты и времени с помощью API Windows GetSystemTimeAsFileTime(). Точность зависит от физического оборудования и версии Windows, в которой запущен экземпляр SQL Server. Точность возвращаемых значений этого API-интерфейса задана равной 100 нс. Точность может быть определена с помощью метода GetSystemTimeAdjustment() API-интерфейса Windows.

      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      SYSDATETIME SYSDATETIME ( ) Возвращает значение типа datetime2(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime2(7) Недетерминированная
      SYSDATETIMEOFFSET SYSDATETIMEOFFSET ( ) Возвращает значение типа datetimeoffset(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение содержит смещение часового пояса. datetimeoffset(7) Недетерминированная
      SYSUTCDATETIME SYSUTCDATETIME ( ) Возвращает значение типа datetime2(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в формате UTC. datetime2(7) Недетерминированная
      Функции системной даты и времени меньшей точности
      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      CURRENT_TIMESTAMP CURRENT_TIMESTAMP Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime Недетерминированная
      GETDATE GETDATE ( ) Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime Недетерминированная
      GETUTCDATE GETUTCDATE ( ) Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в формате UTC. datetime Недетерминированная

      Функции, возвращающие компоненты даты и времени

      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      DATE_BUCKET DATE_BUCKET ( datepart, number, date, origin ) Возвращает значение даты и времени, соответствующее началу каждого контейнера даты и времени, из временной метки, определенной параметром origin или исходным значением по умолчанию 1900-01-01 00:00:00.000 , если параметр orgin не указан. Тип возвращаемого значения зависит от типа аргумента, переданного в параметре date. Недетерминированная
      DATENAME DATENAME ( datepart, date ) Возвращает строку символов, представляющую указанную часть datepart заданного типа date. nvarchar Недетерминированная
      DATEPART DATEPART ( datepart, date ) Возвращает целое число, представляющее указанную часть datepart заданного типа date. int Недетерминированная
      DATETRUNC DATETRUNC ( datepart, date ) Эта функция возвращает входную дату date, усеченную до указанной части datepart. Тип возвращаемого значения зависит от типа аргумента, переданного в параметре date. Недетерминированная
      DAY DAY ( date ) Возвращает целое число, представляющее часть дня указанного типа date. int Детерминированный
      MONTH MONTH ( date ) Возвращает целое число, представляющее часть месяца указанного типа date. int Детерминированный
      YEAR YEAR ( date ) Возвращает целое число, представляющее часть года указанного типа date. int Детерминированный

      Функции, возвращающие значения даты и времени из их компонентов

      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      DATEFROMPARTS DATEFROMPARTS ( year, month, day ) Возвращает значение date, соответствующее указанному числу, месяцу и году. date Детерминированный
      DATETIME2FROMPARTS DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision) Возвращает значение datetime2, соответствующее указанной дате и времени с заданной точностью. datetime2(precision) Детерминированный
      DATETIMEFROMPARTS DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds) Возвращает значение datetime, соответствующее указанной дате и времени. datetime Детерминированный
      DATETIMEOFFSETFROMPARTS DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision) Возвращает значение datetimeoffset для указанных даты и времени с указанными смещением и точностью. datetimeoffset(precision) Детерминированный
      SMALLDATETIMEFROMPARTS SMALLDATETIMEFROMPARTS ( year, month, day, hour, minute ) Возвращает значение smalldatetime, соответствующее указанной дате и времени. smalldatetime Детерминированный
      TIMEFROMPARTS TIMEFROMPARTS ( hour, minute, seconds, fractions, precision ) Возвращает значение time, соответствующее указанному времени с заданной точностью. time(precision) Детерминированный

      Функции, возвращающие значения разности даты и времени

      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      DATEDIFF DATEDIFF ( datepart, startdate, enddate ) Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами. int Детерминированный
      DATEDIFF_BIG DATEDIFF_BIG ( datepart, startdate, enddate ) Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами. bigint Детерминированный

      Функции, изменяющие значения даты и времени

      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      DATEADD DATEADD (datepart, number, date ) Возвращает новое значение datetime, добавляя интервал к указанной части datepart заданной даты date. Тип данных аргумента date Детерминированный
      EOMONTH EOMONTH ( start_date [, month_to_add ] ) Возвращает последний день месяца, содержащего указанную дату, с необязательным смещением. Тип возвращаемого значения — это тип аргумента start_date или тип данных date. Детерминированный
      SWITCHOFFSET SWITCHOFFSET (DATETIMEOFFSET, time_zone) Функция SWITCHOFFSET изменяет смещение часового пояса для значения DATETIMEOFFSET и сохраняет значение UTC. Значение datetimeoffset с точностью в долях секунд, заданной в аргументе DATETIMEOFFSET Детерминированный
      TODATETIMEOFFSET TODATETIMEOFFSET (expression, time_zone) TODATETIMEOFFSET преобразует значение типа datetime2 в значение типа datetimeoffset. Функция TODATETIMEOFFSET преобразует значение datetime2 в местное время для указанного time_zone. Значение datetimeoffset с точностью в долях секунд, заданной в аргументе datetime Детерминированный

      Функции, устанавливающие или возвращающие функции формата сеанса

      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      @@DATEFIRST @@DATEFIRST Возвращает текущее значение параметра SET DATEFIRST для сеанса. tinyint Недетерминированная
      SET DATEFIRST SET DATEFIRST < number | @number_var > Устанавливает первый день недели в виде числа от 1 до 7. Неприменимо Неприменимо
      SET DATEFORMAT SET DATEFORMAT < format | @format_var > Задает порядок составляющих даты (месяц/день/год) для ввода данных типа datetime или smalldatetime. Неприменимо Неприменимо
      @@LANGUAGE @@LANGUAGE Возвращает название использующегося в настоящий момент языка. @@LANGUAGE не является функцией даты или времени. Однако на данные, выводимые функциями даты, могут повлиять настройки языка. Неприменимо Неприменимо
      SET LANGUAGE SET LANGUAGE < [ N ] language | @language_var > Устанавливает языковую среду сеанса и системных сообщений. SET LANGUAGE не является функцией даты или времени. Однако на данные, выводимые функциями даты, влияет параметр языка. Неприменимо Неприменимо
      sp_helplanguage sp_helplanguage [ [ = ] language ] Возвращает сведения о формате даты всех поддерживаемых языков. sp_helplanguage не является хранимой процедурой даты или времени. Однако на данные, выводимые функциями даты, влияет параметр языка. Неприменимо Неприменимо

      Функции, проверяющие значения даты и времени

      Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
      ISDATE ISDATE ( expression ) Определяет, является ли входное выражение типа datetime или smalldatetime допустимым значением даты или времени. int Функция ISDATE детерминирована, только если используется совместно с функцией CONVERT и если заданный параметр стиля CONVERT не равен 0, 100, 9 или 109.

      Дата и время — см. также

      Статья Описание
      FORMAT Возвращает значение в указанных формате и культуре (не обязательно). Для выполнения форматирования значения даты, времени и чисел с учетом локали в виде строк используется функция FORMAT.
      Функции CAST и CONVERT (Transact-SQL) Предоставляет сведения о преобразовании значений даты и времени в строковые литералы и обратно, а также в другие форматы даты и времени.
      Написание инструкций Transact-SQL, адаптированных к международному использованию Предоставляет рекомендации относительно переносимости баз данных и приложений баз данных, использующих инструкции Transact-SQL, с одного языка на другой или в многоязычную среду.
      Скалярные функции ODBC (Transact-SQL) Предоставляет сведения о скалярных функциях ODBC, которые могут использоваться в инструкциях Transact-SQL. К ним относятся функции даты и времени ODBC.
      AT TIME ZONE (Transact-SQL) Обеспечивает преобразование часовых поясов.

      См. также

      • Функции
      • Типы данных (Transact-SQL)

      Обратная связь

      Были ли сведения на этой странице полезными?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *