Поделиться через


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

  • числовой разделитель числовой разделитель 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, будут относиться к столетию года усечения. Значения, большие или равные двум последним цифрам этого параметра, относятся к столетию, предшествующему столетию года усечения. Например, если значение параметра 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

Описание

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

  • Параметр 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

При преобразовании в типы данных даты и времени SQL Server отвергает все значения, которые он не распознает как значения даты или времени. Дополнительные сведения об использовании функций CAST и CONVERT c данными типов даты и времени см. в разделе Функции CAST и CONVERT (Transact-SQL).

Преобразование типа datetime в другие типы данных даты и времени

В следующей таблице показано, каким образом тип данных datetime преобразуется в другие типы даты и времени.

Тип данных, в который выполняется преобразование

Дополнительные сведения о преобразовании

date

Год, месяц и день копируются. Для компонента времени устанавливается значение 00:00:00.000.

Следующий код демонстрирует результаты преобразования значения date в значение datetime.

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

time(n)

Компонент времени копируется, для компонента даты устанавливается значение «1900-01-01». Если точность в долях секунды значения time(n) больше трех цифр, значение будет усечено.

Следующий пример показывает результаты преобразования значения time(4) в значение datetime.

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
--
--(1 row(s) affected)

smalldatetime

Копируются часы и минуты. Секунды и доли секунд устанавливаются в значение 0.

Следующий код демонстрирует результаты преобразования значения smalldatetime в значение datetime.

DECLARE @smalldatetime smalldatetime = '12-01-01 12:32';
DECLARE @datetime datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime               @smalldatetime
------------------------- -----------------------
--2001-12-01 12:32:00.000 2001-12-01 12:32:00
--
--(1 row(s) affected)

datetimeoffset(n)

Копируются компоненты даты и времени. Часовой пояс усекается. Если точность в долях секунд для значения datetimeoffset(n) превышает три разряда, значение будет усечено.

Следующий пример показывает результаты преобразования значения datetimeoffset(4) в значение datetime.

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
--
--(1 row(s) affected)

datetime2(n)

Копируются компоненты даты и времени. Если точность в долях секунд для значения datetime2(n) превышает три разряда, значение будет усечено.

Следующий пример показывает результаты преобразования значения datetime2(4) в значение datetime.

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
--
--(1 row(s) affected)

Примеры

В следующем примере сравниваются результаты приведения строкового типа к каждому из типов данных 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

См. также

Справочник

Функции CAST и CONVERT (Transact-SQL)