date (Transact-SQL)
Определяет дату в SQL Server. Тип данных даты появился в SQL Server 2008 (10.0.x).
Описание типа данных date
| Свойство | Значение |
|---|---|
| Синтаксис | DATE |
| Использование | DECLARE @MyDate DATE |
MM — это две цифры от 01 12 того, что представляет месяц в указанном году.
Поддерживаемые форматы строковых литералов для типа данных date
В приведенной ниже таблице перечислены допустимые форматы строковых литералов для типа данных date.
Поддерживаются только четыре цифры или двухзначные годы. Для записи года рекомендуется всегда использовать четырехзначный формат. Чтобы указать целое число от 0001 9999 того, что представляет отрезок года для интерпретации двухзначных лет в качестве четырехзначных лет, используйте параметр конфигурации сервера отсечения двухзначного года.
Примечание. Для Informatica ограничено yyyy диапазоном 1582 9999 .
Если двузначное число, обозначающее год, меньше или равно двузначному числу из последних двух цифр порогового года, год относится к тому же столетию, что и пороговый год. Если двузначное число, обозначающее год, больше двузначного числа из последних двух цифр порогового года, год относится к столетию, которое предшествует столетию порогового года. Например, если двухзначный отрезок года является стандартным 2049 , двухзначный год 49 интерпретируется как 2049 и двухзначный год 50 интерпретируется как 1950 .
Текущий языковой параметр определяет формат даты по умолчанию. Формат даты можно изменить с помощью инструкций SET LANGUAGE и SET DATEFORMAT.
Во избежание неоднозначности используйте четырехзначную запись года.
| ODBC | Description |
|---|---|
| Зависит от API-интерфейса ODBC. |
| Формат W3C XML | Description |
|---|---|
| yyyy-MM-ddTZD | Введен для использования в XML и SOAP. |
TZD — это конструктор часового пояса ( Z или -hh:mm +hh:mm ):
Соответствие стандартам ANSI и ISO 8601
Значение date соответствует стандартному определению ANSI SQL для григорианского календаря:
ПРИМЕЧАНИЕ 85. Типы данных Datetime позволяют хранить даты в григорианском формате в диапазоне дат 0001-01-01 CE до 9999-12-31 CE.
Формат строкового литерала по умолчанию, используемый для клиентов нижнего уровня, соответствует стандартной форме SQL, определенной как yyyy-MM-dd . Этот формат совпадает с определением ISO 8601 для DATE .
Для Informatica диапазон ограничен 1582-10-15 (15 октября 1582 CE) до 9999-12-31 (31 декабря 9999 CE).
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты нижнего уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. В следующей таблице показано сопоставление типов между экземпляром SQL Server и клиентами нижнего уровня.
| Тип данных SQL Server | Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровня | ODBC низкого уровня | OLEDB низкого уровня | JDBC низкого уровня | SQLCLIENT низкого уровня |
|---|---|---|---|---|---|
| time | hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
| date | yyyy-MM-dd | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
| datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
| datetimeoffset | yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STR | Java.sql.String | String или SqString |
Преобразование данных даты и времени
При преобразовании в типы данных даты и времени SQL Server отклоняет все значения, которые не распознаются как даты или время. Сведения об использовании и CONVERT функциях с данными CAST даты и времени см. в статье CAST и CONVERT (Transact-SQL).
Преобразование даты в другие типы дат и времени
В этом разделе описывается, что происходит при преобразовании типа данных date в другие типы даты и времени.
При преобразовании в time(n)преобразование завершается ошибкой и возникает сообщение об ошибке 206:
Столкновение типов операнда: дата несовместима с временем.
Если преобразование равно datetime, компонент даты копируется. В следующем коде показаны результаты преобразования значения даты в значение datetime .
DECLARE @date DATE = '12-10-25'; DECLARE @datetime DATETIME = @date; SELECT @date AS '@date', @datetime AS '@datetime';
@date @datetime ---------- ----------------------- 2025-12-10 2025-12-10 00:00:00.000
При преобразовании в smalldatetime значение даты находится в диапазоне smalldatetime, компонент даты копируется, а для компонента времени задано значение . 00:00:00.000 Если значение даты выходит за пределы диапазона значения smalldatetime, возникает сообщение об ошибке 242, а значение smalldatetime имеет NULL значение :
Преобразование типа данных даты в типы данных smalldatetime привело к значению вне диапазона.
В следующем коде показаны результаты преобразования значения даты в значение smalldatetime .
DECLARE @date DATE = '1912-10-25'; DECLARE @smalldatetime SMALLDATETIME = @date; SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
@date @smalldatetime ---------- ------------------- 1912-10-25 1912-10-25 00:00:00
Для преобразования в datetimeoffset(n)дата копируется, а время — 00:00.0000000 +00:00 . В следующем коде показаны результаты преобразования значения даты в значение datetimeoffset(3).
DECLARE @date DATE = '1912-10-25'; DECLARE @datetimeoffset DATETIMEOFFSET(3) = @date; SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
@date @datetimeoffset ---------- ------------------------------ 1912-10-25 1912-10-25 00:00:00.000 +00:00
При преобразовании в datetime2(n)компонент даты копируется, а для компонента времени задано значение 00:00.000000 . В следующем коде показаны результаты преобразования значения даты в значение datetime2(3).
DECLARE @date DATE = '1912-10-25' DECLARE @datetime2 DATETIME2(3) = @date; SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
@date @datetime2(3) ---------- ----------------------- 1912-10-25 1912-10-25 00:00:00.000
Преобразование строковых литерала в дату
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Иначе возникает ошибка времени выполнения. Неявные преобразования или явные преобразования, не указывающие стиль, от типов даты и времени до строковых литералов, находятся в формате по умолчанию текущего сеанса. В таблице ниже приводятся правила преобразования строковых литералов в тип данных 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('2022-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time', CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date', CAST('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime', CAST('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime', CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2', CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
| Тип данных | Выходные данные |
|---|---|
| time | 12:35:29.1234567 |
| date | 2022-05-08 |
| smalldatetime | 2022-05-08 12:35:00 |
| datetime | 2022-05-08 12:35:29.123 |
| datetime2 | 2022-05-08 12:35:29.1234567 |
| datetimeoffset | 2022-05-08 12:35:29.1234567 +12:15 |
См. также
Как поменять формат даты в sql
SQLRU.net
Разработка приложений баз данных
Начало » Использование СУБД » Microsoft SQL Server » Изменить Dateformat серверу/бд (Изменить Dateformat серверу/бд)
| Показать: Сегодняшние сообщения :: Голосования :: Навигатор по сообщениям Отправить по e-mail |
Junior Member
Подскажите, есть варианты сменить dateformat или где-нибудь посередине пролечить эти форматы?
Как изменить формат даты в sql
Для изменения формата даты в SQL, можно использовать функцию преобразования даты — CONVERT() или функцию форматирования даты — FORMAT() . Обе функции могут быть использованы в различных СУБД SQL (например, в MySQL, PostgreSQL, SQL Server).
Вот пример использования этих функций:
SELECT CONVERT(varchar, GETDATE(), 103) AS 'DD/MM/YYYY'
В этом примере мы используем функцию CONVERT() , чтобы преобразовать текущую дату (используя функцию GETDATE() ) в формат даты ‘DD/MM/YYYY’. Цифры 103 являются кодом формата даты.
SELECT FORMAT(GETDATE(), 'dd/MM/yyyy') AS 'DD/MM/YYYY'
В этом примере мы используем функцию FORMAT() , чтобы отформатировать текущую дату (используя функцию GETDATE() ) в формат ‘dd/MM/yyyy’.
Обратите внимание, что формат даты может отличаться в зависимости от используемой СУБД SQL.
SQL. Как привести дату в строку в нужный формат в SQL Server
На выходе получается дату в строковом виде в нужном формате.
Что еще посмотреть по SQL Server
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.