Статьи

datetime (Transact-SQL) - SQL Server

  1. Відповідність стандартам ANSI і ISO 8601 ANSI and ISO 8601 Compliance
  2. приклади Examples
  3. Див. Також розділ See also

ОБЛАСТЬ ЗАСТОСУВАННЯ: ОБЛАСТЬ ЗАСТОСУВАННЯ:   SQL Server   База даних SQL Azure   Сховище даних SQL Azure   Parallel Data Warehouse APPLIES TO:   SQL Server   Azure SQL Database   Azure SQL Data Warehouse   Parallel Data Warehouse   Визначає дату, що включає час дня з частками секунди в 24-годинному форматі SQL Server База даних SQL Azure Сховище даних SQL Azure Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure SQL Data Warehouse Parallel Data Warehouse

Визначає дату, що включає час дня з частками секунди в 24-годинному форматі. Defines a date that is combined with a time of day with fractional seconds that is based on a 24-hour clock.

Примітка

Використовуйте для нових проектів типи даних time, date, datetime2 і datetimeoffset. Use the time, date, datetime2 and datetimeoffset data types for new work. Ці типи відповідають стандарту мови SQL. These types align with the SQL Standard. Їх простіше переносити на інші платформи. They are more portable. Типи time, datetime2 і datetimeoffset забезпечують більшу точність секунд. time, datetime2 and datetimeoffset provide more seconds precision. datetimeoffset забезпечує підтримку часових поясів для додатків, розгорнутих по всьому світу. datetimeoffset provides time zone support for globally deployed applications .

Властивість Property Значення Value Синтаксис Syntax datetime datetime Використання Usage DECLARE @MyDatetime datetime DECLARE @MyDatetime datetime
CREATE TABLE Таблица1 (Столбец1 datetime) CREATE TABLE Table1 (Column1 datetime) Формати строкових літералів за замовчуванням Default string literal formats
(Використовується для клієнта нижнього рівня) (used for down-level client) Не застосовується Not applicable Діапазон дати Date range З 1 січня 1753 року по 31 грудня 9999 року January 1, 1753, through December 31, 9999 Діапазон часу Time range Від 00:00 : 00 до 23: 59: 590,997 00:00:00 through 23: 59: 59.997 Діапазон зміщення часового поясу Time zone offset range None None Діапазони елементів Element ranges РРРР - чотиризначний число від 1753 до 9999, що представляє рік. YYYY is four digits from 1753 through 9999 that represent a year.
ММ позначає 2 цифри, які представляють місяць і приймають значення від 01 до 12. MM is two digits, ranging from 01 to 12, that represent a month in the specified year.
Позначення ДД складається з двох цифр, які представляють день зазначеного місяця, і приймає значення від 01 до 31 в залежності від місяця. DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.
Позначення чч складається з двох цифр, які представляють годину, і приймає значення від 00 до 23. hh is two digits, ranging from 00 to 23, that represent the hour.
Позначення мм складається з двох цифр, які представляють хвилину, і приймає значення від 00 до 59. mm is two digits, ranging from 00 to 59, that represent the minute.
Позначення сс складається з двох цифр, які представляють секунду, і приймає значення від 00 до 59. ss is two digits, ranging from 00 to 59, that represent the second.
Позначення n * може містити від нуля до трьох цифр, які представляють частки секунди, і приймає значення від 0 до 999. n * is zero to three digits, ranging from 0 to 999, that represent the fractional seconds. Довжина в символах Character length Мінімально 19 позицій, максимально - 23 19 positions minimum to 23 maximum Обсяг пам'яті Storage size 8 байт 8 bytes Точність Accuracy округлі до збільшення 0,000, 0,003 або 0,007 секунд Rounded to increments of .000, .003, or .007 seconds значення за замовчуванням Default value 1900-01-01 00:00:00 1900-01-01 00:00:00 Календар Calendar Григоріанський (включає повний діапазон років) Gregorian (Does include the complete range of years.) Обумовлена ​​користувачем точність в частках секунди User-defined fractional second precision ні No Облік і збереження зміщення часового поясу Time zone offset aware and preservation ні No Облік переходу на літній час Daylight saving aware ні No

У представлених нижче таблицях наводяться підтримувані формати строкових літералів для типу даних datetime. The following tables list the supported string literal formats for datetime . За винятком ODBC, рядкові літерали типу datetime полягають в одинарні лапки ( '), наприклад' string_literaL '. Except for ODBC, datetime string literals are in single quotation marks ( '), for example,' string_literaL '. Якщо мова середовища не us_english, рядкові літерали повинні мати формат N'string_literaL '. If the environment is not us_english, the string literals should be in the format N'string_literaL '.

Числовий Numeric Опис Description Формати дати Date formats:
[0] 4/15 / [19] 96 - (МДГ) [0] 4/15 / [19] 96 - (mdy)
[0] 4-15- [19] 96 - (МДГ) [0] 4-15- [19] 96 - (mdy)
[0] 4.15. [19] 96 - (МДГ) [0] 4.15. [19] 96 - (mdy)
[0] 4 / [19] 96/15 - (МГД) [0] 4 / [19] 96/15 - (myd)
15 / [0] 4 / [19] 96 - (ДМГ) 15 / [0] 4 / [19] 96 - (dmy)
15 / [19] 96 / [0] 4 - (ДГМ) 15 / [19] 96 / [0] 4 - (dym)
[19] 96/15 / [0] 4 - (ГДМ) [19] 96/15 / [0] 4 - (ydm)
[19] 96 / [0] 4/15 - (ГМД) [19] 96 / [0] 4/15 - (ymd)
Формати часу Time formats:
14:30 14:30
14:30 [: 20: 999] 14:30 [: 20: 999]
14:30 [: 20.9] 14:30 [: 20.9]
4am 4am
16:00:00 4 PM Місяць в датах може вказуватися в числовому форматі. You can specify date data with a numeric month specified. Наприклад, 5/20/97 позначає двадцяте травня 1997 року. For example, 5/20/97 represents the twentieth day of May 1997. Використовуючи числовий формат дат, вказуйте місяць, день і рік у вигляді рядка зі знаками косою риси (/), дефісами (-) або точками (.) В якості роздільників . When you use numeric date format, specify the month, day, and year in a string that uses slash marks (/), hyphens (-), or periods (.) As separators. Цей рядок повинна виглядати наступним чином: This string must appear in the following form:
число роздільник число роздільник число [час] [час] number separator number separator number [time] [time]
При використанні мовної налаштування us_english порядком за замовчуванням для дати є mdy (МДГ). When the language is set to us_english, the default order for the date is mdy. Порядок дати можна змінити за допомогою інструкції SET DATEFORMAT . You can change the date order by using the SET DATEFORMAT statement.
Установка для SET DATEFORMAT визначає, як будуть інтерпретовані значення дат. The setting for SET DATEFORMAT determines how date values ​​are interpreted. Якщо порядок не відповідає конфігурації, значення не обробляються як дати. If the order does not match the setting, the values ​​are not interpreted as dates. Невпорядковані дати можуть неправильно інтерпретуватися як дати за межами діапазону або дати з неправильними значеннями. Out-of-order dates may be misinterpreted as out of range or with wrong values. Наприклад, 12/10/08 може бути інтерпретовано як одна з шести різних дат в залежності від установки DATEFORMAT. For example, 12/10/08 can be interpreted as one of six dates, depending on the DATEFORMAT setting. Чотиризначний рік інтерпретується як рік. A four-part year is interpreted as the year. Алфавітний формат Alphabetical Опис Description Apr [il] [15] [,] 1 996 Apr [il] [15] [,] 1 996
Apr [il] 15 [,] [19] 96 Apr [il] 15 [,] [19] 96
Apr [il] 1996 [15] Apr [il] 1996 [15]
[15] Apr [il] [,] 1996 [15] Apr [il] [,] 1996
15 Apr [il] [,] [19] 96 15 Apr [il] [,] [19] 96
15 [19] 96 apr [il] 15 [19] 96 apr [il]
[15] 1996 apr [il] [15] 1996 apr [il]
1996 APR [IL] [15] 1996 APR [IL] [15]
1996 [15] APR [IL] 1996 [15] APR [IL] Можна вказувати дату з повним ім'ям місяця. You can specify date data with a month specified as the full month name. Наприклад, «квітень» або скорочення «Квітень», задане в поточному мовою. Коми не обов'язкові, регістр букв не враховується. For example, April or the month abbreviation of Apr specified in the current language; commas are optional and capitalization is ignored.
Деякі рекомендації щодо застосування алфавітних форматів дати: Here are some guidelines for using alphabetical date formats:
1. Укладайте дату і час в одинарні лапки ( '). 1) Enclose the date and time data in single quotation marks ( '). Для всіх мов, окрім англійської, використовуйте «N '». For languages ​​other than English, use N '
2. Символи, укладені в квадратні дужки, є необов'язковими. 2) Characters that are enclosed in brackets are optional.
3. Якщо вказати дві останні цифри року, значення, менші двох останніх цифр значення параметра конфігурації сервера two digit year cutoff , Будуть ставитися до сторіччя року усічення. 3) If you specify only the last two digits of the year, values ​​less than the last two digits of the value of the Configure the two digit year cutoff Server Configuration Option configuration option are in the same century as the cutoff year. Значення, великі або рівні двом останнім цифрам цього параметра, відносяться до сторіччя, що передує сторіччя року усічення. Values ​​greater than or equal to the value of this option are in the century that comes before the cutoff year. Наприклад, якщо значення параметра two digit year cutoff одно 2050 (за замовчуванням), то рік, позначений двома цифрами 25, інтерпретується як 2025, а рік, позначений двома цифрами 50, - як 1950. For example, if two digit year cutoff is 2050 (default), 25 is interpreted as 2025 and 50 is interpreted as 1950. Щоб уникнути неоднозначності використовуйте чотиризначну запис року. To avoid ambiguity, use four-digit years.
4. Якщо не вказано число місяця, мається на увазі перше число місяця. 4) If the day is missing, the first day of the month is supplied.
Параметр сеансу SET DATEFORMAT не застосовується, якщо місяць вказується в алфавітному форматі. The SET DATEFORMAT session setting is not applied when you specify the month in alphabetical form. ISO 8601 ISO 8601 Опис Description РРРР-ММ-ДДТчч: мм: сс [ммм] YYYY-MM-DDThh: mm: ss [.mmm]
РРРРММДД [чч: мм: сс [ммм]] YYYYMMDD [hh: mm: ss [.mmm]] Приклади: Examples:
1. 2004-05-23T14: 25: 10 1) 2004-05-23T14: 25: 10
2. 2004-05-23T14: 25: 10.487 2) 2004-05-23T14: 25: 10.487
Щоб використовувати формат ISO 8601, необхідно вказати кожен елемент в цьому форматі, включаючи T, двокрапка (:) і точку (.), Які відображаються в цьому форматі. To use the ISO 8601 format, you must specify each element in the format, including the T, the colons (:), and the period (.) That are shown in the format.
Квадратні дужки показують, що частки секунд не є обов'язковими. The brackets indicate that the fraction of second component is optional. Тимчасової компонент вказано в 24-годинному форматі. The time component is specified in the 24-hour format.
Символ T вказує на початок тимчасової частини значення datetime. The T indicates the start of the time part of the datetime value .
Перевага формату ISO 8601 полягає в тому, що він є міжнародним стандартом з однозначним поданням. The advantage in using the ISO 8601 format is that it is an international standard with unambiguous specification. Крім того, на цей формат не впливають настройки SET DATEFORMAT і SET LANGUAGE . Also, this format is not affected by the SET DATEFORMAT or SET LANGUAGE setting. Без роздільників Unseparated Опис Description РРРРММДД чч: мм: сс [ммм] YYYYMMDD hh: mm: ss [.mmm] інтерфейс ODBC ODBC Опис Description {ts '1998-05-02 01: 23: 56.123'} {ts '1998- 05-02 01: 23: 56.123 '}
{D '1990-10-02'} {d '1990-10-02'}
{T '13: 33: 41 '} {t '13: 33: 41'} Інтерфейс API ODBC визначає керуючі послідовності, що представляють значення дати і часу, звані в ODBC мітками часу. The ODBC API defines escape sequences to represent date and time values, which ODBC calls timestamp data. Цей формат міток часу ODBC також підтримується визначенням мови OLE DB (DBGUID-SQL), підтримуваним постачальником Microsoft Microsoft OLE DB для SQL Server SQL Server. This ODBC timestamp format is also supported by the OLE DB language definition (DBGUID-SQL) supported by the Microsoft Microsoft OLE DB provider for SQL Server SQL Server. Програми, що використовують ADO, OLE DB або API-інтерфейси, засновані на ODBC, можуть використовувати цей формат відміток часу ODBC для представлення дати і часу. Applications that use the ADO, OLE DB, and ODBC-based APIs can use this ODBC timestamp format to represent dates and times.
Escape-послідовності міток часу ODBC мають такий вигляд: {literal_type 'constant_value'}: ODBC timestamp escape sequences are of the format: {literal_type 'constant_value'}:
- literal_type визначає тип escape-послідовності. - literal_type specifies the type of the escape sequence. Мітки часу мають три описателя literal_type: Timestamps have three literal_type specifiers:
1) d = тільки дата 1) d = date only
2) t = тільки час 2) t = time only
3) ts = мітка часу (час + дата) 3) ts = timestamp (time + date)
- 'constant_value' є значенням escape-послідовності. - 'constant_value' is the value of the escape sequence. Значення constant_value має відповідати цим форматам для кожного literal_type. constant_value must follow these formats for each literal_type.
d: рррр-мм-дд d: yyyy-mm-dd
t: чч: мм: сс [.fff] t: hh: mm: ss [.fff]
ts: рррр-мм-дд гг: мм: сс [.fff] ts: yyyy-mm-dd hh: mm: ss [.fff]

Значення типу datetime округлюються в більшу сторону до 0,000, 0,003 або 0,007 секунди, як показано в таблиці, представленої нижче. datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.

Зазначене користувачем значення User-specified value Значення, збережене системою System stored value 01/01/98 23: 59: 59.999 01/01/98 23: 59: 59.999 1998-01-02 00: 00: 00.000 1998-01-02 00 : 00: 00.000 01/01/98 23: 59: 59.995 01/01/98 23: 59: 59.995
01/01/98 23: 59: 59.996 01/01/98 23: 59: 59.996
01/01/98 23: 59: 59.997 01/01/98 23: 59: 59.997
01/01/98 23: 59: 59.998 01/01/98 23: 59: 59.998 1998-01-01 23: 59: 59.997 1998-01-01 23: 59: 59.997 01/01/98 23: 59: 59.992 01/01/98 23: 59: 59.992
01/01/98 23: 59: 59.993 01/01/98 23: 59: 59.993
01/01/98 23: 59: 59.994 01/01/98 23: 59: 59.994 1998-01-01 23: 59: 59.993 1998-01-01 23: 59: 59.993 01/01/98 23: 59: 59.990 01/01/98 23: 59: 59.990
01/01/98 23: 59: 59.991 01/01/98 23: 59: 59.991 1998-01-01 23: 59: 59.990 1998-01-01 23: 59: 59.990

Відповідність стандартам ANSI і ISO 8601 ANSI and ISO 8601 Compliance

datetime не задовольняє стандартам ANSI і ISO 8601. datetime is not ANSI or ISO 8601 compliant.

При перетворенні в типи даних дати і часу SQL Server SQL Server відкидає всі значення, які розпізнаються як значення дати або часу. When you convert to date and time data types, SQL Server SQL Server rejects all values ​​it can not recognize as dates or times. Відомості про використання функцій CAST і CONVERT c даними типів дати і часу см. В статті Функції CAST і CONVERT (Transact-SQL) . For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL) .

У цьому розділі описується, що відбувається при перетворенні інших типів дати і часу в тип даних datetime. This section describes what occurs when other date and time data types are converted to the datetime data type .

При перетворенні з типу date копіюються рік, місяць і день. When the conversion is from date, the year, month, and day are copied. Для компонента часу встановлюється значення 00: 00: 00.000. The time component is set to 00: 00: 00.000. Наступний код демонструє результати перетворення значення date в значення datetime. The following code shows the results of converting a date value to a datetime value.

DECLARE @date date = '12 -21-16 '; DECLARE @datetime datetime = @date; SELECT @datetime AS '@datetime', @date AS '@date'; --Result - @ datetime @date ------------------------- ---------- --2016-12- 21 00: 00: 00.000 2016-12-21

При перетворенні з time (n) компонент часу копіюється, а для компонента дати встановлюється значення 1900-01-01. When the conversion is from time (n), the time component is copied, and the date component is set to '1900-01-01'. Якщо точність в частках секунди значення time (n) більше трьох цифр, значення буде усечено. When the fractional precision of the time (n) value is greater than three digits, the value will be truncated to fit. Наступний приклад показує результати перетворення значення time (4) в значення datetime. The following example shows the results of converting a time (4) value to a datetime value.

DECLARE @time time (4) = '12: 10: 05.1237 '; DECLARE @datetime datetime = @time; SELECT @datetime AS '@datetime', @time AS '@time'; --Result - @ datetime @time ------------------------- ------------- --1900 -01-01 12: 10: 05.123 12: 10: 05.1237

При перетворенні з типу smalldatetime копіюються годинник і хвилини. When the conversion is from smalldatetime, the hours and minutes are copied. Секунди і долі секунд встановлюються в значення 0. The seconds and fractional seconds are set to 0. Наступний код демонструє результати перетворення значення smalldatetime в значення datetime. The following code shows the results of converting a smalldatetime value to a datetime value.

DECLARE @smalldatetime smalldatetime = '12 -01-16 12:32 '; DECLARE @datetime datetime = @smalldatetime; SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime'; --Result - @ datetime @smalldatetime ------------------------- ---------------- ------- --2016-12-01 12: 32: 00.000 2016-12-01 12:32:00

При перетворенні з типу datetimeoffset (n) копіюються компоненти дати і часу. When the conversion is from datetimeoffset (n), the date and time components are copied. Часовий пояс буде скорочуватися. The time zone is truncated. Якщо точність в частках секунди для значення datetimeoffset (n) перевищує три розряди, значення буде усечено. When the fractional precision of the datetimeoffset (n) value is greater than three digits, the value will be truncated. Наступний приклад показує результати перетворення значення datetimeoffset (4) в значення datetime. The following example shows the results of converting a datetimeoffset (4) value to a datetime value.

DECLARE @datetimeoffset datetimeoffset (4) = '1968-10-23 12: 45: 37.1234 +10: 0'; DECLARE @datetime datetime = @datetimeoffset; SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset'; --Result - @ datetime @datetimeoffset ------------------------- ---------------- -------------- --1968-10-23 12: 45: 37.123 1968-10-23 12: 45: 37.1237 +01: 0

При перетворенні з типу datetime2 (n) копіюються дата і час. When the conversion is from datetime2 (n), the date and time are copied. Якщо точність в частках секунди для значення datetime2 (n) перевищує три розряди, значення буде усечено. When the fractional precision of the datetime2 (n) value is greater than three digits, the value will be truncated. Наступний приклад показує результати перетворення значення datetime2 (4) в значення datetime. The following example shows the results of converting a datetime2 (4) value to a datetime value.

DECLARE @ datetime2 datetime2 (4) = '1968-10-23 12: 45: 37.1237'; DECLARE @datetime datetime = @ datetime2; SELECT @datetime AS '@datetime', @ datetime2 AS '@ datetime2'; --Result - @ datetime @ datetime2 ------------------------- ---------------- -------- --1968-10-23 12: 45: 37.123 1968-10-23 12: 45: 37.1237

приклади Examples

У наведеному нижче прикладі порівнюються результати приведення строкового типу до кожного з типів даних date і time. The following example compares the results of casting a string to each date and time data type .

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 ';

Нижче наводиться результуючий набір. Here is the result set.

Тип даних Data type Висновок Output time time 12:35:29. 12:35:29. 1234567 1234567 date date 2007-05-08 2007-05-08 smalldatetime smalldatetime 2007-05-08 12:35:00 2007-05-08 12:35:00 datetime datetime 2007-05-08 12: 35: 29.123 2007- 05-08 12: 35: 29.123 datetime2 datetime2 2007-05-08 12:35:29. 2007-05-08 12:35:29. 1234567 1234567 datetimeoffset datetimeoffset 2007-05-08 12: 35: 29.1234567 +12: 15 2007-05-08 12: 35: 29.1234567 +12: 15

Див. Також розділ See also

Функції CAST і CONVERT (Transact-SQL) CAST and CONVERT (Transact-SQL)

Новости