datetimeoffset (Transact-SQL)
Определяет дату, объединенную со временем дня, с учетом часового пояса в 24-часовом формате.
Описание типа данных 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 позиций (ГГГГ-ММ-ДД чч:мм:сс. ннннннн {+|-}чч:мм) |
||||||||||||||||||||||||||||||||||||||||
Точность, масштаб |
|
||||||||||||||||||||||||||||||||||||||||
Объем памяти |
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;
обозначение мм состоит из двух цифр, представляющих дополнительное смещение часового пояса в минутах, и принимает значения от 00 до 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.
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты низкого уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. В следующей таблице показано сопоставление типов экземпляра более высокого уровня SQL Server и клиентов низкого уровня.
Тип данных SQL Server 2012 |
Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровня |
ODBC низкого уровня |
OLEDB низкого уровня |
JDBC низкого уровня |
SQLCLIENT низкого уровня |
---|---|---|---|---|---|
time |
чч:мм:сс[. ннннннн] |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
date |
ГГГГ-ММ-ДД |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
datetime2 |
ГГГГ-ММ-ДД чч:мм:сс[. ннннннн] |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
datetimeoffset |
ГГГГ-ММ-ДД чч:мм:сс[. ннннннн] [+|-]чч:мм |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
Преобразование данных типа Date и Time
При преобразовании в типы данных даты и времени SQL Server отвергает все значения, которые он не распознает как значения даты или времени. Дополнительные сведения об использовании функций CAST и CONVERT c данными типов даты и времени см. в разделе Функции CAST и CONVERT (Transact-SQL)
Преобразование типа данных datetimeoffset в другие типы данных даты и времени
В следующей таблице показано, каким образом тип данных datetimeoffset преобразуется в другие типы даты и времени.
Тип данных, в который выполняется преобразование |
Дополнительные сведения о преобразовании |
---|---|
date |
Год, месяц и день копируются. Следующий код демонстрирует результаты преобразования значения datetimeoffset(4) в значение date.
|
time(n) |
Часы, минуты, секунды и доли секунды копируются. Значение часового пояса усекается. Если точность значения типа datetimeoffset(n) больше точности значения типа time(n), оно округляется. Следующий код демонстрирует результаты преобразования значения datetimeoffset(4) в значение time(3).
|
datetime |
Значения даты и времени копируются; часовой пояс усекается. Если точность в долях секунды для значения datetimeoffset(n) превышает три разряда, значение будет усечено. Следующий код демонстрирует результаты преобразования значения datetimeoffset(4) в значение datetime.
|
smalldatetime |
Копируются дата и часы. Минуты округляются с учетом значения секунд, а секундам задается значение 0. Следующий код демонстрирует результаты преобразования значения datetimeoffset(3) в значение smalldatetime.
|
datetime2(n) |
Значения даты и времени копируются в значение типа datetime2; часовой пояс усекается. Если точность значения типа datetime2(n) больше точности значения типа datetimeoffset(n), доли секунды усекаются. Следующий код демонстрирует результаты преобразования значения типа datetimeoffset(4) в значение типа datetime2(3).
|
Преобразование строковых литералов в datetimeoffset
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Иначе возникает ошибка времени выполнения. Явные или скрытые преобразования, в которых не задан стиль преобразования типов данных даты и времени в строковые литералы, будут проведены в формате по умолчанию для текущего сеанса. В следующей таблице приводятся правила преобразования строковых литералов в типы данных datetimeoffset.
Строковый литерал входа |
datetimeoffset(n) |
---|---|
ODBC DATE |
Строковые литералы ODBC сопоставляются с типом данных datetime. Любая операция присваивания литералов ODBC DATETIME в типы данных datetimeoffset вызывает неявное преобразование между данным типом и типом datetime согласно правилам преобразования. |
ODBC TIME |
См. предыдущее правило ODBC DATE. |
ODBC DATETIME |
См. предыдущее правило ODBC DATE. |
только DATE |
Компонент TIME по умолчанию имеет значение 00:00:00. Компонент TIMEZONE по умолчанию имеет значение +00:00. |
только TIME |
Компонент DATE по умолчанию имеет значение 1900-1-1. Компонент TIMEZONE по умолчанию будет иметь значение +00:00. |
только TIMEZONE |
Указаны значения по умолчанию |
DATE + TIME |
Компонент TIMEZONE по умолчанию имеет значение +00:00. |
DATE + TIMEZONE |
Не допускается |
TIME + TIMEZONE |
Компонент DATE по умолчанию имеет значение 1900-1-1. |
DATE + TIME + TIMEZONE |
Простейший |
Примеры
В следующем примере сравниваются результаты приведения строкового типа к каждому из типов данных 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 |