datetime (Transact-SQL)

Определяет дату, включающую время дня с долями секунды в 24-часовом формате.

ПримечаниеПримечание

Используйте для новых проектов типы данных time, date, datetime2 и datetimeoffset. Эти типы соответствуют стандарту языка SQL. Их проще переносить на другие платформы. Функции time, datetime2 и datetimeoffset дают большую точность секунд. Функция datetimeoffset поддерживает часовые пояса для приложений, развернутых по всему миру.

Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в разделе Функции даты и времени (Transact-SQL). Сведения и примеры, относящиеся к типам данным и функциям даты и времени, см. в разделе Использование данных даты и времени.

Описание типа данных datetime

Свойство

Значение

Синтаксис

datetime

Использование

DECLARE @MyDatetime datetime

CREATE TABLE Таблица1 ( Столбец1 datetime )

Форматы строковых литералов по умолчанию

(используется для клиента нижнего уровня)

Неприменимо

Диапазон даты

1 января 1753 года — 31 декабря 9999 года

Диапазон времени

От 00:00:00 до 23:59:590,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 года. Используя числовой формат дат, указывайте месяц, день и год в виде строки со знаками косой черты (/), дефисами (-) или точками (.) в качестве разделителей. Эта строка должна выглядеть следующим образом:

  • числовой разделитель числовой разделитель number [time] [time]

При использовании в качестве языковой настройки 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]

Можно указывать дату с полным именем месяца. Например, «апрель» или сокращение «Апр», заданное в текущем языке. Запятые не обязательны, регистр букв не учитывается.

Некоторые рекомендации по применению алфавитных форматов даты:

  • Заключайте дату и время в одинарные кавычки ('). Для всех языков, кроме английского, используйте «N'».

  • Символы, заключенные в квадратные скобки, являются необязательными.

  • Если указать две последние цифры года, значения, меньшие двух последних цифр значения параметра конфигурации two digit year cutoff, будут относиться к столетию года усечения. Значения, большие или равные двум последним цифрам этого параметра, относятся к столетию, предшествующему столетию года усечения. Например, если пороговое значение года для двухзначной записи равно 2050 (по умолчанию), то год, обозначенный двумя цифрами 25, интерпретируется как 2025, а год, обозначенный двумя цифрами 50, — как 1950. Во избежание неоднозначности используйте четырехзначную запись года.

  • Если не указано число месяца, подразумевается первое число месяца.

Параметр сеанса SET DATEFORMAT не применяется, если месяц указывается в алфавитном формате.

ISO 8601

Описание

ГГГГ-ММ-ДДТчч:мм:сс[.ммм]

ГГГГММДД[ чч:мм:сс[.ммм]]

Примеры

  • 2004-05-23Т14:25:10

  • 2004-05-23T14:25:10.487

Чтобы использовать формат ISO 8601, необходимо указать каждый элемент формата. Сюда также включаются символы T, двоеточие (:) и точка (.), показанные в формате.

Квадратные скобки показывают, что доли секунд не являются обязательными. Временной компонент указан в 24-часовом формате.

Символ «T» указывает на начало временной части значения типа datetime.

Преимущество формата ISO 8601 заключается в том, что он является международным стандартом с однозначным представлением. Кроме того, на данный формат не влияют настройки SET DATEFORMAT и SET LANGUAGE.

Без разделителей

Описание

ГГГГММДД чч:мм:сс[.ммм]

ODBC

Описание

{ тс «1998-05-02 01:23:56.123» }

{ д «1990-10-02» }

{ т «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' }:

  • Параметр literal_type определяет тип управляющей последовательности. Отметки времени имеют три определителя literal_type:

    • d = только дата

    • t = только время

    • ts = отметка времени (дата + время)

  • Параметр constant_value — это значение escape-последовательности. Значение constant_value должно соответствовать этим форматам для каждого literal_type.

    literal_typeформат constant_value
    d гггг-мм-дд
    t чч:мм:сс[.fff]
    ts гггг-мм-дд чч:мм:сс:[.fff]

Округление типа данных 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.

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

См. также

Справочник