Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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 |