Поделиться через


datetimeoffset (Transact-SQL)

Определяет дату, объединенную со временем дня, с учетом часового пояса в 24-часовом формате.

Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в разделе Типы данных и функции даты и времени (Transact-SQL). Сведения и примеры, относящиеся к типам данных и функциям даты и времени, см. в разделе Использование данных даты и времени.

Описание типа данных datetimeoffset

Свойство

Значение

Синтаксис

datetimeoffset [ (fractional seconds precision) ]

Сведения об использовании

DECLARE @MyDatetimeoffset datetimeoffset(7)

CREATE TABLE Таблица1 ( Столбец1 datetimeoffset(7) )

Форматы строковых литералов по умолчанию (используются для клиента нижнего уровня)

ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [{+|-}чч:мм]

Дополнительные сведения см. в подразделе «Обратная совместимость для клиентов нижнего уровня» раздела Использование данных даты и времени.

Диапазон даты

От 0001-01-01 до 9999-12-31

С 1 января 1 года нашей эры до 31 декабря 9999 года нашей эры.

Диапазон времени

От 00:00:00 до 23:59:59.9999999

Диапазон смещения часового пояса

  • От -14:00 до +14:00

Диапазоны элементов

ГГГГ обозначает 4 цифры, которые представляют год и принимают значения от 0001 до 9999.

ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12.

Обозначение ДД состоит из двух цифр, представляющих день указанного месяца, и принимает значения от 01 до 31 в зависимости от месяца.

Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 00 до 23.

Обозначение мм состоит из двух цифр, представляющих минуту, и принимает значения от 00 до 59.

Обозначение сс состоит из двух цифр, представляющих секунду, и принимает значения от 00 до 59.

Обозначение n* может содержать от нуля до семи цифр, представляющих доли секунды, и принимает значения от 0 до 9999999.

Обозначение чч состоит из двух цифр и может принимать значения от -14 до +14.

Обозначение мм состоит из двух цифр и может принимать значения от 00 до 59.

Длина в символах

От 26 позиций (ГГГГ-ММ-ДД чч:мм:сс {+|-}чч:мм) до 34 позиций ((ГГГГ-ММ-ДД чч:мм:сс.ннннннн {+|-}чч:мм)

Точность, масштаб

Указанный масштабРезультат (точность, масштаб)Длина столбца (в байтах)Точность в долях секунды
datetimeoffset (34,7)107
datetimeoffset(0) (26,0)80-2
datetimeoffset(1) (28,1)80-2
datetimeoffset(2) (29,2)80-2
datetimeoffset(3) (30,3)93-4
datetimeoffset(4) (31,4)93-4
datetimeoffset(5) (32,5)105-7
datetimeoffset(6) (33,6)105-7
datetimeoffset(7) (34,7)105-7

Объем памяти

10 байт, по умолчанию используется фиксированная точность 100 нс.

Точность

100 наносекунд

Значение по умолчанию

1900-01-01 00:00:00 00:00

Календарь

Григорианский

Определяемая пользователем точность в долях секунды

Yes

Учет и сохранение смещения часового пояса

Yes

Учет перехода на летнее время

Нет

Поддерживаемые форматы строковых литералов для типа данных datetimeoffset

В следующей таблице перечислены поддерживаемые форматы строковых литералов ISO 8601 для типа данных datetimeoffset. Дополнительные сведения об алфавитных и числовых форматах, форматах строки без разделителей и форматах времени для частей даты и времени типа datetimeoffset см. в разделах date (Transact-SQL) и time (Transact-SQL).

ISO 8601

Описание

ГГГГ-ММ-ДДТчч:мм:сс[.ннннннн] [{+|-}чч:мм]

На эти два формата не влияют настройки языкового стандарта сеанса инструкций SET LANGUAGE и SET DATEFORMAT. Между частями datetimeoffset и datetime не должно быть пробелов.

ГГГГ-ММ-ДДТчч:мм:сс[.ннннннн]Z (в формате UTC)

Этот формат по определению ISO указывает, что компонент datetime должен выражаться во времени в формате UTC. Например, дата и время 1999-12-12 12:30:30.12345 -07:00 должны представляться как 1999-12-12 19:30:30.12345Z.

Смещение часового пояса

Смещение часового пояса задает смещение относительно времени в формате UTC для значения типа time или datetime. Смещение часового пояса может быть представлено в формате [+|-] чч:мм:

  • обозначение чч состоит из двух цифр, представляющих количество часов в смещении часового пояса, и принимает значения от 0 до 14;

  • обозначение мм состоит из двух цифр, представляющих дополнительное смещение временного пояса в минутах, и принимает значения от 0 до 59;

  • + (плюс) или – (минус) представляет собой обязательный знак смещения часового пояса. Данный знак указывает, добавляется или вычитается смещение часового пояса от времени по Гринвичу (формат UTC), чтобы получить локальное время. Допустимый диапазон смещения часового пояса: от -14:00 до +14:00.

Диапазон смещения часового пояса соответствует стандарту W3C XML для определения XSD-схемы и немного отличается от стандартного определения SQL 2003, от 12:59 до +14:00.

Необязательный параметр типа fractional seconds precision задает количество знаков в дробной части секунды. Значение может быть целым числом от 0 до 7 (100 наносекунд). По умолчанию значение fractional seconds precision равно 100 нс (семь знаков в дробной части секунды).

Эти данные хранятся в базе данных и обрабатываются, сравниваются, сортируются и индексируются на сервере как значения в формате UTC. Смещение часового пояса будет сохранено в базе данных для получения.

Предполагается, что заданное смещение часового пояса будет учитывать переход на летнее время и настраиваться на любой заданный тип datetime, учитывающий этот переход.

Для типа данных datetimeoffset как значение в формате UTC, так и локальное (в постоянном или преобразованном смещении часового пояса) значение datetime будет проверяться во время операций вставки, обновления, преобразования, присвоения или арифметических операций. Обнаружение недопустимого значения (в постоянном или преобразованном смещении часового пояса) типа datetime (локального или в формате UTC) вызовет ошибку недопустимого значения. Например, 9999-12-31 10:10:00 действительно в формате UTC, но вызовет переполнение по местному времени для смещения часового пояса +13:50.

Соответствие стандартам ANSI и ISO 8601

Тип данных datetimeoffset соответствует стандартам date и time ANSI и ISO 8601.

Пример

В следующем примере сравниваются результаты приведения строкового типа к каждому из типов данных date и time.

SELECT 
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' 
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 
        'smalldatetime' 
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' 
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetime2(7)) AS 
        'datetime2'
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 
        'datetimeoffset'
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS
        'datetimeoffset IS08601';

Ниже приводится результирующий набор.

Тип данных

Вывод

Time

12:35:29. 1234567

Date

2007-05-08

Smalldatetime

2007-05-08 12:35:00

Datetime

2007-05-08 12:35:29.123

datetime2

2007-05-08 12:35:29. 1234567

Datetimeoffset

2007-05-08 12:35:29.1234567 +12:15