Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Определяет дату, включающую время суток в 24-часовом формате. Тип данных datetime2 может рассматриваться как расширение существующего типа datetime, имеющее более широкий диапазон дат, большую точность в долях секунды по умолчанию и дополнительную точность, определяемую пользователем.
Описание datetime2
| Property | Value |
|---|---|
| Syntax | datetime2 [ (точность дробных секунд) ] |
| Usage | DECLARE @MyDatetime2 datetime2(7);CREATE TABLE Table1 (Column1 datetime2(7)); |
| Формат строковых литералов по умолчанию (используется для клиента нижнего уровня) |
yyyy-MM-dd HH:mm:ss[.nnnnnnn]Дополнительные сведения см. в разделе "Обратная совместимость" для клиентов нижнего уровня далее в этой статье. |
| Диапазон дат |
0001-01-01 через 9999-12-31С 1 января 1 года нашей эры до 31 декабря 9999 года нашей эры |
| Диапазон времени |
00:00:00 через 23:59:59.9999999 |
| Диапазон смещения часового пояса | None |
| Диапазоны элементов |
yyyy — это четырехзначное число, начиная от 0001 до 9999, которое представляет год.MM — это двухзначное число, начиная от 0112от , которое представляет месяц в указанном году.dd — это двухзначное число, от 0131 которого зависит от месяца, который представляет день указанного месяца.HH — это двухзначное число, от которого 0023определяется час.mm — это двухзначное число, начиная от 0059от , которое представляет минуту.ss — это двухзначное число, начиная от 0059от , которое представляет второй.n* — от нуля до семизначного числа, 09999999представляющего дробные секунды. В Informatica дробные секунды усечены, если n меньше 3. |
| Длина символа | Минимальное значение 19 позиций (yyyy-MM-dd HH:mm:ssдо 27) (yyyy-MM-dd HH:mm:ss.0000000) |
| Точность, масштаб | От 0 до 7 цифр с точностью 100 наносекунд (100 ns). Точность по умолчанию составляет 7 цифр. В хранилище данных Microsoft Fabric эта точность может быть целым числом от 0 до 6 без значения по умолчанию. Точность должна быть указана в хранилище данных Microsoft Fabric. |
| Объем памяти 1 | 6 байтов для представления точности меньше 3 цифр. 7 байтов — для точности в 3 или 4 цифры. Для всей другой точности требуется 8 байт. 2 |
| Accuracy | 100 наносекунд |
| Значение по умолчанию | 1900-01-01 00:00:00 |
| Calendar | Gregorian |
| Определяемая пользователем точность в долях секунды | Yes |
| Учет и сохранение смещения часового пояса | No |
| Учет перехода на летнее время | No |
1 Указанные значения относятся к несжатым rowstore. Использование сжатия данных или columnstore может изменить размер хранилища для каждой точности. Кроме того, размер хранилища на диске и в памяти может отличаться. Например, значения datetime2 при использовании пакетного режима всегда требует 8 байт в памяти.
2 При приведение значения datetime2 к значению varbinary добавляется дополнительный байт в значение varbinary для хранения точности.
Сведения о метаданных типа данных см. в разделе sys.systypes или TYPEPROPERTY. В некоторых типах данных дат и времени точность и масштаб разные. Чтобы получить точность и масштаб столбца, см. статью COLUMNPROPERTY, COL_LENGTH или sys.column.
Поддерживаемые форматы строковых литералов для типа данных datetime2
В таблицах ниже приводятся поддерживаемые форматы строковых литералов ISO 8601 и ODBC для типа данных datetime2. Сведения о алфавитном, числовых, неисполненных и временных форматах для частей даты и времени даты и времени см. в разделе даты и времени.
| ISO 8601 | Descriptions |
|---|---|
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] |
Этот формат не влияет на SET LANGUAGESET DATEFORMAT параметры языкового стандарта сеанса. Двоеточия T(:) и период (.) включаются в строковый литерал, например 2024-05-02T19:58:47.1234567. |
| ODBC | Description |
|---|---|
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } |
Зависит от API-интерфейса ODBC. Можно указать от 0 до 7 знаков (100 наносекунд) справа от десятичной запятой, представляющих доли секунды. |
Соответствие стандартам ANSI и ISO 8601
Соглашения стандартов ANSI и ISO 8601 для типов данных date и time применимы к типу данных datetime2.
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты нижнего уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. В следующей таблице показано сопоставление типов между экземпляром SQL Server и клиентами нижнего уровня.
| Тип данных SQL Server | Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровня | OdBC нижнего уровня | OLEDB нижнего уровня | JDBC нижнего уровня | SQLCLIENT нижнего уровня |
|---|---|---|---|---|---|
| time | HH:mm:ss[.nnnnnnn] | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String или SqString |
| date | yyyy-MM-dd | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String или SqString |
| datetime2 | гггг-ММ-дд HH:mm:ss[.nnnnnnnnn] | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String или SqString |
| datetimeoffset | гггг-ММ-дд HH:mm:ss[.nnnnn] [+|-]hh:mm | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String или SqString |
Преобразование данных даты и времени
При преобразовании в типы данных даты и времени ядро СУБД отклоняет все значения, которые не могут распознаваться как даты или время. Сведения об использовании функций CAST и CONVERT с данными даты и времени см. в разделе CAST и CONVERT
Преобразование других типов дат и времени в тип данных datetime2
В этом разделе описывается, что происходит при преобразовании других типов даты и времени в тип данных datetime2.
При преобразовании из типа date копируются год, месяц и день. Для компонента времени устанавливается значение 00:00:00.0000000. Следующий код демонстрирует результаты преобразования значения date в значение datetime2.
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
Вот результирующий набор.
@datetime2 @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21
При преобразовании из времени (n)компонент времени копируется, а для компонента даты задано значение 1900-01-01. В следующем примере показаны результаты преобразования значения time(7) в значение datetime2 .
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
Вот результирующий набор.
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
При преобразовании из типа smalldatetime копируются часы и минуты. Секунды и доли секунд устанавливаются в значение 0. Следующий код демонстрирует результаты преобразования значения smalldatetime в значение datetime2.
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
Вот результирующий набор.
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
При преобразовании из типа datetimeoffset(n) копируются компоненты даты и времени. Часовой пояс усекается. Следующий пример показывает результаты преобразования значения datetimeoffset(7) в значение datetime2.
DECLARE @datetimeoffset AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;
SELECT @datetime2 AS '@datetime2',
@datetimeoffset AS '@datetimeoffset';
Вот результирующий набор.
@datetime2 @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
При преобразовании из типа datetime копируются дата и время. Точность в долях увеличивается до 7 цифр. Следующий пример показывает результаты преобразования значения datetime в значение datetime2.
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
Вот результирующий набор.
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Явное приведение к datetime2 при использовании datetime
В соответствии с уровнем совместимости базы данных 130 и выше неявные преобразования из типов данных datetime в datetime2 показывают улучшенную точность за счет учета дробных миллисекунд, что приводит к различным преобразованным значениям, как показано в предыдущем примере. Используйте явное приведение к типу данных datetime2 всякий раз, когда существует смешанный сценарий сравнения между типами данных datetime и datetime2 . Дополнительные сведения см. в статье SQL Server и База данных SQL Azure улучшения обработки некоторых типов данных и необычных операций.
Преобразование строковых литерала в datetime2
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Иначе возникает ошибка времени выполнения. Неявные преобразования или явные преобразования, которые не указывают стиль, от типов даты и времени до строковых литералов находятся в формате текущего сеанса по умолчанию. В таблице ниже приводятся правила преобразования строковых литералов в тип данных datetime2.
| Строковый литерал входа | datetime2(n) |
|---|---|
ODBC DATE |
Строковые литералы ODBC сопоставляются с типом данных datetime. Любая операция назначения из литералов в ODBC DATETIMEтипы datetime2 вызывает неявное преобразование между датой и этим типом, как определено правилами преобразования. |
ODBC TIME |
См. предыдущее ODBC DATE правило. |
ODBC DATETIME |
См. предыдущее ODBC DATE правило. |
Только DATE |
Часть TIME по умолчанию 00:00:00. |
Только TIME |
Часть DATE по умолчанию 1900-01-01. |
Только TIMEZONE |
Указаны значения по умолчанию. |
DATE + TIME |
Trivial. |
DATE + TIMEZONE |
Запрещено. |
TIME + TIMEZONE |
Часть DATE по умолчанию — 1900-1-1.
TIMEZONE входные данные игнорируются. |
DATE + TIME + TIMEZONE |
Используется локальный DATETIME . |
Examples
В приведенном ниже примере сравниваются результаты приведения строкового типа к каждому из типов данных 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';
Вот результирующий набор.
| Тип данных | Output |
|---|---|
| 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 |