datetime (Transact-SQL)
Определяет дату, включающую время дня с долями секунды в 24-часовом формате.
Примечание |
---|
Используйте для новых проектов типы данных time, date, datetime2 и datetimeoffset. Эти типы соответствуют стандарту языка SQL. Их проще переносить на другие платформы. time, datetime2 и datetimeoffset поддерживают более высокую точность секунд. datetimeoffset обеспечивает поддержку часовых поясов для приложений, развертываемых по всему миру. |
Описание типа данных datetime
Свойство |
Значение |
---|---|
Синтаксис |
datetime |
Использование |
DECLARE @MyDatetime datetime CREATE TABLE Таблица1 (столбец1 datetime ) |
Форматы строковых литералов по умолчанию (используется для клиента нижнего уровня) |
Неприменимо |
Диапазон даты |
1 января 1753 года — 31 декабря 9999 года |
Диапазон времени |
От 00:00:00 до 23:59:59,997 |
Диапазон смещения часового пояса |
Отсутствует |
Диапазоны элементов |
ГГГГ — четырехзначное число от 1753 до 9999, представляющее год. ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12. Обозначение ДД состоит из двух цифр, представляющих день указанного месяца, и принимает значения от 01 до 31 в зависимости от месяца. Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 00 до 23. Обозначение мм состоит из двух цифр, представляющих минуту, и принимает значения от 00 до 59. Обозначение сс состоит из двух цифр, представляющих секунду, и принимает значения от 00 до 59. Обозначение n* может содержать от нуля до трех цифр, представляющих доли секунды, и принимает значения от 0 до 999. |
Длина в символах |
Минимально 19 позиций, максимально — 23 |
Объем памяти |
8 байт |
Точность |
Округлено до приращения 0,000, 0,003 или 0,007 секунд |
Значение по умолчанию |
1900-01-01 00:00:00 |
Календарь |
Григорианский (не включает полный диапазон лет) |
Определяемая пользователем точность в долях секунды |
Нет |
Учет и сохранение смещения часового пояса |
Нет |
Учет перехода на летнее время |
Нет |
Поддерживаемые форматы строковых литералов для типа данных datetime
В следующих таблицах приводятся поддерживаемые форматы строковых литералов для типа данных datetime. За исключением ODBC, строковые литералы типа datetime заключаются в одинарные кавычки ('), например 'string_literaL'. Если язык среды не us_english, строковые литералы должны иметь формат «N'string_literaL'».
Numeric |
Описание |
---|---|
Форматы даты [0]4/15/[19]96 -- (мдг) [0]4-15-[19]96 -- (мдг) [0]4.15.[19]96 -- (мдг) [0]4/[19]96/15 -- (мгд) 15/[0]4/[19]96 -- (дмг) 15/[19]96/[0]4 -- (дгм) [19]96/15/[0]4 -- (гдм) [19]96/[0]4/15 -- (гмд) Форматы времени 14:30 14:30[:20:999] 14:30[:20.9] 04:00:00 16:00:00 |
Месяц в датах может указываться в числовом формате. Например, 5/20/97 обозначает двадцатое мая 1997 года. Используя числовой формат дат, указывайте месяц, день и год в виде строки со знаками косой черты (/), дефисами (-) или точками (.) в качестве разделителей. Эта строчка должна выглядеть следующим образом:
При использовании в качестве языковой настройки us_english порядком по умолчанию для даты является mdy (МДГ). Порядок даты можно изменить при помощи инструкции SET DATEFORMAT. Установка для SET DATEFORMAT определяет, как будут интерпретированы значения дат. Если порядок не соответствует параметру, значения не рассматриваются как даты, поскольку находятся вне допустимого диапазона или интерпретируются ошибочно. Например, 12/10/08 может быть интерпретировано как одна из шести различных дат в зависимости от установки DATEFORMAT. Четырехзначный год интерпретируется как год. |
Алфавитный формат |
Описание |
---|---|
Apr[il] [15][,] 1996 Apr[il] 15[,] [19]96 Apr[il] 1996 [15] [15] Apr[il][,] 1996 15 Apr[il][,][19]96 15 [19]96 apr[il] [15] 1996 apr[il] 1996 APR[IL] [15] 1996 [15] APR[IL] |
Можно указывать дату с полным именем месяца. Например, «апрель» или сокращение «Апр», заданное в текущем языке. Запятые не обязательны, регистр букв не учитывается. Некоторые рекомендации по применению алфавитных форматов даты:
Параметр сеанса SET DATEFORMAT не применяется, если месяц указывается в алфавитном формате. |
ISO 8601 |
Описание |
---|---|
ГГГГ-ММ-ДДТчч:мм:сс[.ммм] ГГГГММДД[ чч:мм:сс[.ммм]] |
Примеры:
Чтобы использовать формат ISO 8601, необходимо указать каждый элемент формата. Сюда также включаются символы T, двоеточие (:) и точка (.), показанные в формате. Квадратные скобки показывают, что доли секунд не являются обязательными. Временной компонент указан в 24-часовом формате. Символ «T» указывает на начало временной части значения типа datetime. Преимущество формата ISO 8601 заключается в том, что он является международным стандартом с однозначным представлением. Кроме того, на данный формат не влияют настройки SET DATEFORMAT и SET LANGUAGE. |
Без разделителей |
Описание |
---|---|
ГГГГММДД чч:мм:сс[.ммм] |
ODBC |
Описание |
||||||||
---|---|---|---|---|---|---|---|---|---|
{ ts '1998-05-02 01:23:56.123' } { d '1990-10-02' } { t '13:33:41' } |
Интерфейс API ODBC определяет управляющие последовательности, представляющие значения даты и времени, называемые в ODBC отметками времени. Этот формат отметок времени ODBC также поддерживается языком определений OLE DB (DBGUID-SQL), поддерживаемым поставщиком Microsoft OLE DB для SQL Server. Приложения, использующие ADO, OLE DB или API-интерфейсы, основанные на ODBC, могут использовать этот формат отметок времени ODBC для представления даты и времени. Управляющие последовательности отметок времени ODBC имеют следующий формат: { literal_type 'constant_value' }:
|
Округление типа данных datetime до долей секунды
Значения типа datetime округляются в большую сторону до 0,000, 0,003 или 0,007 долей секунд как показано в таблице, представленной ниже.
Указанное пользователем значение |
Значение, хранимое системой |
---|---|
01/01/98 23:59:59.999 |
1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
Соответствие стандартам ANSI и ISO 8601
datetime не удовлетворяет стандартам ANSI и ISO 8601.
Преобразование данных типа Date и Time
При преобразовании в типы данных даты и времени SQL Server отвергает все значения, которые он не распознает как значения даты или времени. Дополнительные сведения об использовании функций CAST и CONVERT c данными типов даты и времени см. в разделе Функции CAST и CONVERT (Transact-SQL).
Преобразование типа datetime в другие типы данных даты и времени
В следующей таблице показано, каким образом тип данных datetime преобразуется в другие типы даты и времени.
Тип данных, в который выполняется преобразование |
Дополнительные сведения о преобразовании |
---|---|
date |
Год, месяц и день копируются. Для компонента времени устанавливается значение 00:00:00.000. Следующий код демонстрирует результаты преобразования значения date в значение datetime.
|
time(n) |
Компонент времени копируется, для компонента даты устанавливается значение «1900-01-01». Если точность в долях секунды значения time(n) больше трех цифр, значение будет усечено. Следующий пример показывает результаты преобразования значения time(4) в значение datetime.
|
smalldatetime |
Копируются часы и минуты. Секунды и доли секунд устанавливаются в значение 0. Следующий код демонстрирует результаты преобразования значения smalldatetime в значение datetime.
|
datetimeoffset(n) |
Копируются компоненты даты и времени. Часовой пояс усекается. Если точность в долях секунд для значения datetimeoffset(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения datetimeoffset(4) в значение datetime.
|
datetime2(n) |
Копируются компоненты даты и времени. Если точность в долях секунд для значения datetime2(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения datetime2(4) в значение 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 |