date (Transact-SQL)
Определяет дату в SQL Server.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Описание типа данных date
Свойство |
Значение |
---|---|
Синтаксис |
date |
Использование |
DECLARE @MyDate date CREATE TABLE Таблица1 (столбец1 date ) |
Формат строковых литералов по умолчанию (используется для клиента нижнего уровня) |
ГГГГ-ММ-ДД Дополнительные сведения см. в подразделе «Обратная совместимость для клиентов низкого уровня» следующего раздела. |
Диапазон |
От 0001-01-01 до 9999-12-31 От 1 января 1 года нашей эры до 31 декабря 9999 года нашей эры. |
Диапазоны элементов |
ГГГГ обозначает 4 цифры, которые представляют год и принимают значения от 0001 до 9999. ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12. ДД обозначает две цифры, представляющие день указанного месяца и принимающие значения от 01 до 31 в зависимости от месяца. |
Длина в символах |
10 позиций |
Точность, масштаб |
10, 0 |
Объем памяти |
3 байта, фиксированный |
Структура хранилища |
Дата хранится в одной переменной типа integer размером 1 или 3 байта. |
Точность |
Один день |
Значение по умолчанию |
1900-01-01 Данное значение используется как присоединяемая часть даты при неявном преобразовании данных типа time в значение типа datetime2 или datetimeoffset. |
Календарь |
Григорианский |
Определяемая пользователем точность в долях секунды |
Нет |
Учет и сохранение смещения часового пояса |
Нет |
Учет перехода на летнее время |
Нет |
Поддерживаемые форматы строковых литералов для типа данных date
В следующей таблице перечислены допустимые форматы строковых литералов для типа данных date.
Числовой |
Описание |
---|---|
mdy [м]м/дд/[гг]гг [м]м-дд-[гг]гг [м]м.дд.[гг]гг мгд мм/[гг]гг/дд мм-[гг]гг/дд [м]м.[гг]гг.дд дмг дд/[м]м/[гг]гг дд-[м]м-[гг]гг дд.[м]м.[гг]гг дгм дд/[гг]гг/[м]м дд-[гг]гг-[м]м дд.[гг]гг.[м]м гмд [гг]гг/[м]м/дд [гг]гг-[м]м-дд [гг]гг-[м]м-дд |
Сочетания [м]м, дд и [гг]гг представляют в строке месяц, день и год, разделенные символом косой черты (/), дефисом (-) или точкой (.). Поддерживаются только двух- и четырехзначные форматы записи года. Для записи года рекомендуется всегда использовать четырехзначный формат. Чтобы указать целое число в промежутке от 0001 до 9999, отображающее пороговое значение года при преобразовании двухзначной записи в четырехзначную, необходимо использовать Настройка параметра конфигурации сервера two digit year cutoff. Если двузначное число, обозначающее год, меньше или равно двузначному числу из последних двух цифр порогового года, год относится к тому же столетию, что и пороговый год. Если двузначное число, обозначающее год, больше двузначного числа из последних двух цифр порогового года, год относится к столетию, которое предшествует столетию порогового года. Например, если пороговое значение года для двухзначной записи равно 2049, то год, обозначенный двумя цифрами 49, интерпретируется как 2049, а год, обозначенный двумя цифрами 50, интерпретируется как 1950. Формат даты по умолчанию определяется текущими настройками языковых стандартов. Формат даты можно изменить с помощью инструкций SET LANGUAGE и SET DATEFORMAT. Формат ydm (гдм) не поддерживается для типа данных date. |
Алфавитный формат |
Описание |
---|---|
мес [дд][,] гггг мес дд[,] [гг]гг мес гггг [дд] [дд] мес[,] гггг дд мес[,] [гг]гг дд [гг]гг мес [дд] гггг мес гггг мес [дд] гггг [дд] мес |
Значение mon (мес) означает полное или сокращенное название месяца на текущем языке. Запятые являются необязательными, регистр букв не учитывается. Во избежание неоднозначности используйте четырехзначную запись года. Если не указано число месяца, подразумевается первое число месяца. |
ISO 8601 |
Описание |
---|---|
ГГГГ-ММ-ДД ГГГГММДД |
То же, что и стандарт SQL. Является единственным международным стандартом. |
Без разделителей |
Описание |
---|---|
[гг]ггммдд гггг[мм][дд] |
Данные типа date могут задаваться с помощью четырех, шести или восьми цифр. Строка из шести или восьми знаков всегда интерпретируется как ymd (гмд). На месяц и день всегда должно приходиться по две цифры. Строка из четырех цифр воспринимается как значение года. |
ODBC |
Описание |
---|---|
{ д 'гггг-мм-дд' } |
Зависит от API-интерфейса ODBC. |
Формат W3C XML |
Описание |
---|---|
гггг-мм-ддTZD |
Специально введен для использования в XML и SOAP. TZD обозначает часовой пояс (в виде номера или смещения +чч:мм и -чч:мм):
|
Соответствие стандартам ANSI и ISO 8601
date соответствует стандартному определению ANSI SQL для григорианского календаря: «Замечание 85 — Данные типа Datetime позволяют хранить даты григорианского календаря в виде чисел диапазона от 0001–01–01 CE до 9999–12–31 CE».
Формат строковых литералов по умолчанию, используемый для клиентов низкого уровня, соответствует стандарту SQL, в котором он определен как ГГГГ-ММ-ДД. Данный формат аналогичен определению даты в стандарте ISO 8601.
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты низкого уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. В следующей таблице показано сопоставление типов экземпляра более высокого уровня SQL Server и клиентов низкого уровня.
Тип данных SQL Server |
Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровня |
ODBC низкого уровня |
OLEDB низкого уровня |
JDBC низкого уровня |
SQLCLIENT низкого уровня |
---|---|---|---|---|---|
time |
чч:мм:сс[. ннннннн] |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
date |
ГГГГ-ММ-ДД |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
datetime2 |
ГГГГ-ММ-ДД чч:мм:сс[. ннннннн] |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
datetimeoffset |
ГГГГ-ММ-ДД чч:мм:сс[. ннннннн] [+|-]чч:мм |
SQL_WVARCHAR или SQL_VARCHAR |
DBTYPE_WSTR или DBTYPE_STR |
Java.sql.String |
String или SqString |
Преобразование данных типа Date и Time
При преобразовании в типы данных даты и времени SQL Server отвергает все значения, которые он не распознает как значения даты или времени. Дополнительные сведения об использовании функций CAST и CONVERT c данными типов даты и времени см. в разделе Функции CAST и CONVERT (Transact-SQL)
Тип данных, в который выполняется преобразование |
Дополнительные сведения о преобразовании |
---|---|
time(n) |
Преобразование завершается ошибкой 206: «Конфликт типов операндов: тип date несовместим с типом time». |
datetime |
Дата копируется, а для компонента времени устанавливается значение «00:00:00.000». Следующий код демонстрирует результаты преобразования значения date в значение datetime.
|
smalldatetime |
Если значение типа date находится в диапазоне значений smalldatetime, компонент даты копируется, а для компонента времени устанавливается значение 00:00:00. Если значение date выходит за диапазон значений smalldatetime, выводится сообщение об ошибке 242: «Преобразование типа данных date в тип данных smalldatetime привело к появлению значения, выходящего за диапазон допустимых значений». После этого для значения типа smalldatetime устанавливается значение NULL. Следующий код демонстрирует результаты преобразования значения date в значение smalldatetime.
|
datetimeoffset(n) |
Дата копируется, для времени устанавливается значение 00:00.0000000 +00:00. Следующий код демонстрирует результаты преобразования значения date в значение datetimeoffset(3).
|
datetime2(n) |
Компонент даты копируется, а для компонента времени устанавливается значение «00:00:00.00» независимо от значения (n). Следующий код демонстрирует результаты преобразования значения date в значение datetime2(3).
|
Преобразование даты в другие типы данных даты и времени
В следующей таблице показано, каким образом тип данных date преобразуется в другие типы даты и времени.
Тип данных, в который выполняется преобразование |
Дополнительные сведения о преобразовании |
---|---|
time(n) |
Преобразование завершается ошибкой 206: «Конфликт типов операндов: тип date несовместим с типом time». |
datetime |
Дата копируется. Следующий код демонстрирует результаты преобразования значения date в значение datetime.
|
smalldatetime |
Если значение типа date находится в диапазоне значений smalldatetime, компонент даты копируется, а для компонента времени устанавливается значение 00:00:00.000. Если значение date выходит за диапазон значений smalldatetime, выводится сообщение об ошибке 242: «Преобразование типа данных date в тип данных smalldatetime привело к появлению значения, выходящего за диапазон допустимых значений». После этого для значения типа smalldatetime устанавливается значение NULL. Следующий код демонстрирует результаты преобразования значения date в значение smalldatetime.
|
datetimeoffset(n) |
Дата копируется, для времени устанавливается значение 00:00.0000000 +00:00. Следующий код демонстрирует результаты преобразования значения date в значение datetimeoffset(3).
|
datetime2(n) |
Компонент даты копируется, для компонента времени устанавливается значение 00:00.000000. Следующий код демонстрирует результаты преобразования значения date в значение datetime2(3).
|
Преобразование строковых литералов в дату
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Иначе возникает ошибка времени выполнения. Явные или скрытые преобразования, в которых не задан стиль преобразования типов данных даты и времени в строковые литералы, будут проведены в формате по умолчанию для текущего сеанса. В следующей таблице приводятся правила преобразования строковых литералов в типы данных date.
Строковый литерал входа |
date |
---|---|
ODBC DATE |
Строковые литералы ODBC сопоставляются с типом данных datetime. Любая операция присваивания литералов ODBC DATETIME типу данных date вызывает неявное преобразование между данным типом и типом datetime согласно правилам преобразования. |
ODBC TIME |
См. предыдущее правило ODBC DATE. |
ODBC DATETIME |
См. предыдущее правило ODBC DATE. |
только DATE |
Простейший. |
только TIME |
Указаны значения по умолчанию. |
только TIMEZONE |
Указаны значения по умолчанию. |
DATE + TIME |
Используется компонент DATE входной строки. |
DATE + TIMEZONE |
Не допускается. |
TIME + TIMEZONE |
Указаны значения по умолчанию. |
DATE + TIME + TIMEZONE |
Используется компонент DATE локального значения 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 |