datetime2 (Transact-SQL)
Определяет дату, включающую время суток в 24-часовом формате. Тип данных datetime2 может рассматриваться как расширение существующего типа datetime, имеющее более широкий диапазон дат, большую точность в долях секунды по умолчанию и дополнительную точность, определяемую пользователем.
Описание типа данных datetime2
Свойство |
Значение |
---|---|
Синтаксис |
datetime2 [ (fractional seconds precision) ] |
Использование |
DECLARE @MyDatetime2 datetime2(7) CREATE TABLE Таблица1 ( Столбец1 datetime2(7) ) |
Формат строковых литералов по умолчанию (используется для клиента нижнего уровня) |
ГГГГ-ММ-ДД чч:мм:сс[.доли секунды] Дополнительные сведения см. в подразделе «Обратная совместимость для клиентов низкого уровня» следующего раздела. |
Диапазон даты |
От 0001-01-01 до 9999-12-31 С 1 января 1 года нашей эры до 31 декабря 9999 года нашей эры |
Диапазон времени |
От 00:00:00 до 23:59:59.9999999 |
Диапазон смещения часового пояса |
Отсутствует |
Диапазоны элементов |
ГГГГ представляет собой четырехзначное число от 0001 до 9999, определяющее год. ММ — двузначное число от 01 до 12, представляющее месяц указанного года. Обозначение ДД состоит из двух цифр, представляющих день указанного месяца, и принимает значения от 01 до 31 в зависимости от месяца. Обозначение «чч» состоит из двух цифр, представляющих час, и принимает значения от 00 до 23. Обозначение «мм» состоит из двух цифр, представляющих минуту, и принимает значения от 00 до 59. Обозначение «сс» состоит из двух цифр, представляющих секунду, и принимает значения от 00 до 59. Обозначение n* может содержать от нуля до семи цифр, представляющих доли секунды, и принимает значения от 0 до 9999999. |
Длина в символах |
Минимальная — 19 позиций (ГГГГ-ММ-ДД чч:мм:сс), максимальная — 27 позиций ((ГГГГ-ММ-ДД чч:мм:сс.0000000) |
Точность, масштаб |
От 0 до 7 цифр, с точностью 100 нс. Точность по умолчанию составляет 7 цифр. |
Объем памяти |
6 байт для представления точности меньше 3 цифр, 7 байт — для точности в 3 и 4 цифры. Для представления любых других значений точности требуется 8 байт. |
Точность |
100 наносекунд |
Значение по умолчанию |
1900-01-01 00:00:00 |
Календарь |
Григорианский |
Определяемая пользователем точность в долях секунды |
Да |
Учет и сохранение смещения часового пояса |
Нет |
Учет перехода на летнее время |
Нет |
Сведения о метаданных для типов данных см. в разделе sys.systypes (Transact-SQL) или TYPEPROPERTY (Transact-SQL). В некоторых типах данных дат и времени точность и масштаб разные. Сведения о точности и масштабе для столбца см. в разделе COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL) или sys.columns (Transact-SQL).
Поддерживаемые форматы строковых литералов для типа данных datetime2
В следующих таблицах приводятся поддерживаемые форматы строковых литералов ISO 8601 и ODBC для типа данных datetime2. Дополнительные сведения об алфавитных и числовых форматах, форматах строки без разделителей и форматах времени для компонентов даты и времени datetime2 см. в разделах date (Transact-SQL) и time (Transact-SQL).
ISO 8601 |
Описания |
---|---|
ГГГГ-ММ-ДДТчч:мм:сс[. ннннннн] ГГГГ-ММ-ДДТчч:мм:сс[. ннннннн] |
На этот формат не влияют настройки локали сеанса инструкций SET LANGUAGE и SET DATEFORMAT. Символы T, двоеточие (:) и точка (.) включаются в строковый литерал, например «2007-05-02T19:58:47.1234567». |
Интерфейс ODBC |
Описание |
---|---|
{ ts 'гггг-мм-дд чч:мм:сс[.доли секунды]' } |
Зависит от API-интерфейса ODBC.
|
Соответствие стандартам ANSI и ISO 8601
Соглашения стандартов ANSI и ISO 8601 для типов данных date и time применимы к типу данных datetime2.
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты низкого уровня не поддерживают типы данных 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).
Преобразование типа данных datetime2 в другие типы данных даты и времени
В следующей таблице показано, каким образом тип данных datetime2 преобразуется в другие типы даты и времени.
Тип данных, в который выполняется преобразование |
Дополнительные сведения о преобразовании |
---|---|
date |
Год, месяц и день копируются. Следующий код демонстрирует результаты преобразования значения datetime2(4) в значение date.
|
time(n) |
Значения часа, минут, секунд и долей секунды копируются, если шкала одинаковая, и округляются, если шкала отличается. Следующий код демонстрирует результаты преобразования значения datetime2(4) в значение time(3).
|
datetime |
Копируются значения даты и времени. Если точность в долях секунды для значения datetime(n) превышает три разряда, значение будет усечено. Следующий код демонстрирует результаты преобразования значения datetime2 в значение datetime.
|
smalldatetime |
Копируются дата и часы. Минуты округляются с учетом секунд, а секундам задается значение 0. Следующий код демонстрирует результаты преобразования значения datetime2 в значение smalldatetime.
|
datetimeoffset(n) |
Значение datetime2(n) копируется из значения datetimeoffset(n). Для смещения часового пояса устанавливается значение +00:0. Если точность значения типа datetime2(n) больше точности значения типа datetimeoffset(n), оно округляется. Следующий код демонстрирует результаты преобразования значения datetime2(5) в значение datetimeoffset(3).
|
Преобразование строковых литералов в datetime2
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Иначе возникает ошибка времени выполнения. Явные или скрытые преобразования, в которых не задан стиль преобразования типов данных даты и времени в строковые литералы, будут проведены в формате по умолчанию для текущего сеанса. В следующей таблице приводятся правила преобразования строковых литералов в типы данных datetime2.
Строковый литерал входа |
datetime2(n) |
---|---|
ODBC DATE |
Строковые литералы ODBC сопоставляются с типом данных datetime. Любая операция присваивания литералов ODBC DATETIME в типы данных datetime2 вызывает неявное преобразование между данным типом и типом datetime согласно правилам преобразования. |
ODBC TIME |
См. предыдущее правило ODBC DATE. |
ODBC DATETIME |
См. предыдущее правило ODBC DATE. |
только DATE |
Компонент TIME по умолчанию имеет значение 00:00:00. |
только TIME |
Компонент DATE по умолчанию имеет значение 1900-1-1. |
только TIMEZONE |
Указаны значения по умолчанию. |
DATE + TIME |
Простейший. |
DATE + TIMEZONE |
Не допускается. |
TIME + TIMEZONE |
Компонент DATE по умолчанию имеет значение 1900-1-1. Входное значение TIMEZONE не учитывается. |
DATE + TIME + TIMEZONE |
Используется локальный компонент DATETIME. |
Примеры
В следующем примере сравниваются результаты приведения строкового типа к каждому из типов данных 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';
Ниже приводится результирующий набор.
Тип данных |
Вывод |
---|---|
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 |