Типы данных и функции даты и времени — SQL Server (Transact-SQL)
- Статья
- 7 минут на чтение
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр Azure SQL Аналитика Azure Synapse
Разделы этой статьи охватывают все типы данных и функции даты и времени Transact-SQL.
- Типы данных даты и времени
- Функции даты и времени
- Функции, возвращающие системные значения даты и времени
- Функции, которые возвращают части даты и времени
- Функции, которые возвращают значения даты и времени из своих частей
- Функции, возвращающие значения даты и разницы во времени
- Функции, изменяющие значения даты и времени
- Функции, которые устанавливают или возвращают функции формата сеанса
- Функции, проверяющие значения даты и времени
- Статьи, связанные с датой и временем
Типы данных даты и времени
Типы данных даты и времени Transact-SQL перечислены в следующей таблице:
Тип данных | Формат | Диапазон | Точность | Размер хранилища (байты) | Определяемая пользователем точность долей секунды | Смещение часового пояса |
---|---|---|---|---|---|---|
время | чч:мм:сс[. nnnnnn] | 00:00:00.0000000 до 23:59:59.9999999 | 100 наносекунд | от 3 до 5 | Да | № |
дата | ГГГГ-ММ-ДД | 01-01-0001 по 31-12-9999 | 1 день | 3 | № | № |
малая дата и время | ГГГГ-ММ-ДД чч:мм:сс | 1900-01-01 по 2079-06-06 | 1 минута | 4 | № | № |
дата-время | ГГГГ-ММ-ДД чч:мм:сс[.nnn] | 1753-01-01 по 9999-12-31 | 0,00333 секунды | 8 | № | № |
дата-время2 | ГГГГ-ММ-ДД чч:мм:сс[.nnnnnn] | 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 | 100 наносекунд | от 6 до 8 | Да | № |
смещение даты и времени | ГГГГ-ММ-ДД чч:мм:сс[.нннннн] [+|-]чч:мм | 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59. 9999999 (в формате UTC) | 100 наносекунд | от 8 до 10 | Да | Да |
Примечание
Тип данных Transact-SQL rowversion не является типом данных даты или времени.
Функции даты и времени
В следующих таблицах перечислены функции даты и времени Transact-SQL. Дополнительные сведения о детерминизме см. в разделе Детерминированные и недетерминированные функции.
Функции, возвращающие системные значения даты и времени
Transact-SQL извлекает все системные значения даты и времени из операционной системы компьютера, на котором работает экземпляр SQL Server.
Высокоточные системные функции даты и времени
Начиная с SQL Server 2008 (10.0.x), компонент Database Engine извлекает значения даты и времени с помощью Windows API GetSystemTimeAsFileTime(). Точность зависит от аппаратного обеспечения компьютера и версии Windows, на которой работает экземпляр SQL Server. Этот API имеет фиксированную точность в 100 наносекунд. Используйте Windows API GetSystemTimeAdjustment() для определения точности.
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
SYSDATETIME | SYSDATETIME ( ) | Возвращает значение datetime2(7) , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение не включает смещение часового пояса. | дата/время2(7) | Недетерминированный |
SYSDATETIMEOFFSET | SYSDATETIMEOFFSET ( ) | Возвращает datetimeoffset(7) , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение включает смещение часового пояса. | смещение даты и времени(7) | Недетерминированный |
SYSUTCDATETIME | SYSUTCDATETIME ( ) | Возвращает значение datetime2(7) , содержащее дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в виде времени UTC (Всемирное скоординированное время). | дата/время2(7) | Недетерминированный |
Функции системной даты и времени более низкой точности
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
CURRENT_TIMESTAMP | CURRENT_TIMESTAMP | Возвращает значение datetime , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение не включает смещение часового пояса. | дата-время | Недетерминированный |
ПОЛУЧИТЬДАТУ | ПОЛУЧИТЬДАТУ ( ) | Возвращает значение datetime , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение не включает смещение часового пояса. | дата-время | Недетерминированный |
ПОЛУЧИТЬ ДАТУ | ПОЛУЧИТЬ ДАТУ ( ) | Возвращает дату и время , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Функция возвращает значения даты и времени в виде времени UTC (Всемирное скоординированное время). | дата-время | Недетерминированный |
Функции, возвращающие части даты и времени
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
DATE_BUCKET | DATE_BUCKET ( датапарт , номер , дата , происхождение ) | Возвращает значение, соответствующее началу каждого сегмента даты и времени из метки времени, определенной параметром origin , или значением origin по умолчанию 1900-01-01 00:00:00. , если параметр origin не указано. | Тип возвращаемого значения зависит от аргумента, предоставленного для даты . | Недетерминированный |
ДАТАИМЯ | ДАТАИМЯ ( датачасть , дата ) | Возвращает строку символов, представляющую указанную датучасть указанной даты. | нварчар | Недетерминированный |
ДАТАЧАСТЬ | DATEPART ( датапарт , дата ) | Возвращает целое число, представляющее указанную часть даты из указанных дата . | Интервал | Недетерминированный |
ДАТЕТРУНК | DATETRUNC ( дата, часть , дата, ) | Возвращает входную дату , усеченную до указанной даты . | Тип возвращаемого значения зависит от аргумента, предоставленного для даты . | Недетерминированный |
ДЕНЬ | ДЕНЬ ( дата ) | Возвращает целое число, представляющее дневную часть указанного числа 9.0342 дата . | Интервал | Детерминированный |
МЕСЯЦ | МЕСЯЦ ( дата ) | Возвращает целое число, представляющее месячную часть указанной даты . | Интервал | Детерминированный |
ГОД | ГОД ( дата ) | Возвращает целое число, представляющее часть года указанной даты . | ряд | Детерминированный |
Функции, возвращающие значения даты и времени из своих частей
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
DATEFROMPARTS | DATEFROMPARTS ( год , месяц , день ) | Возвращает значение даты для указанного года, месяца и дня. | дата | Детерминированный |
ДАТАВРЕМЯ2ОТ ЧАСТЕЙ | DATETIME2FROMPARTS ( год , месяц , день , час , минута , секунд , дроби 3, точность ) Возвращает значение datetime2 для указанной даты и времени с указанной точностью. | дата-время2 ( точность ) | Детерминированный | |
ДАТАВРЕМЯ ОТ ЧАСТЕЙ | DATETIMEFROMPARTS ( год , месяц , день , час , минута , секунды , миллисекунды ) | Возвращает значение datetime для указанной даты и времени. | дата-время | Детерминированный |
DATETIMEOFFSETFROMPARTS | DATETIMEOFFSETFROMPARTS ( Год , Месяц , День , час , минута , секунд , Фракции , HOFFSET , MITEN_OFT_OFFESTERESE , , , . Возвращает значение datetimeoffset для указанной даты и времени с указанными смещениями и точностью. | смещение даты и времени ( точность ) | Детерминированный | |
SMALLDATETIMEFROMPARTS | SMALLDATETIMEFROMPARTS ( год , месяц , день , час , минута ) | Возвращает значение smalldatetime для указанных даты и времени. | малая дата и время | Детерминированный |
TIMEFROMPARTS | TIMEFROMPARTS ( час , минута , секунд , дроби , точность ) | Возвращает значение time для указанного времени с указанной точностью. | время( точность ) | Детерминированный |
Функции, возвращающие значения даты и разницы во времени
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
РАЗНИЦА ДАТЫ | DATEDIFF ( datepart , startdate , enddate ) | Возвращает количество дат или временных границ datepart , пересекаемых между двумя указанными датами. | Интервал | Детерминированный |
DATEDIFF_BIG | DATEDIFF_BIG ( datepart , startdate , enddate ) | Возвращает количество дат или временных границ datepart , пересекаемых между двумя указанными датами. | большое число | Детерминированный |
Функции, изменяющие значения даты и времени
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
ДАТАДОБАВИТЬ | DATEADD ( датачасть , номер , дата ) | Возвращает новое значение datetime , добавляя интервал к указанному дата часть указанной дата . | Тип данных аргумента дата | Детерминированный |
КОНМЕСЯЦ | КОНМЕСЯЦА ( start_date [ month_to_add ] ) | Возвращает последний день месяца, содержащего указанную дату, с необязательным смещением. | Тип возвращаемого значения — это тип аргумента start_date или тип данных date . | Детерминированный |
СМЕЩЕНИЕ ПЕРЕКЛЮЧАТЕЛЯ | SWITCHOFFSET ( DATETIMEOFFSET , часовой пояс ) | SWITCHOFFSET изменяет смещение часового пояса значения DATETIMEOFFSET и сохраняет значение UTC. | datetimeoffset с дробной точностью DATETIMEOFFSET | Детерминированный |
TODATETIMEOFFSET | TODATETIMEOFFSET ( выражение , часовой пояс ) | TODATETIMEOFFSET преобразует значение datetime2 в значение datetimeoffset. TODATETIMEOFFSET интерпретирует значение datetime2 по местному времени для указанного часового пояса. | datetimeoffset с дробной точностью аргумента datetime | Детерминированный |
Функции, которые устанавливают или возвращают функции формата сеанса
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
@@DATEFIRST | @@DATEFIRST | Возвращает текущее значение для сеанса SET DATEFIRST. | крошечный | Недетерминированный |
УСТАНОВИТЬ ПЕРВУЮ ДАТУ | УСТАНОВИТЬ ДАТУПЕРВЫЙ { номер | @ номер_переменная } | Устанавливает первый день недели в число от 1 до 7. | Неприменимо | Неприменимо |
УСТАНОВИТЬ ФОРМАТ ДАТЫ | УСТАНОВИТЬ ФОРМАТ ДАТЫ { формат | @ format_var } | Устанавливает порядок частей даты (месяц/день/год) для ввода данных datetime или smalldatetime . | Неприменимо | Неприменимо |
@@ЯЗЫК | @@ЯЗЫК | Возвращает название используемого языка. @@LANGUAGE не является функцией даты или времени. Однако настройка языка может повлиять на вывод функций даты. | Неприменимо | Неприменимо |
НАСТРОЙКА ЯЗЫКА | УСТАНОВИТЬ ЯЗЫК { [ N ] ‘ язык ‘ | @ языковая_переменная } | Задает языковую среду для сеанса и системных сообщений. SET LANGUAGE не является функцией даты или времени. Однако настройка языка влияет на вывод функций даты. | Неприменимо | Неприменимо |
sp_helplanguage | sp_helplanguage [ [ @language = ] ‘ язык ‘ ] | Возвращает информацию о форматах даты для всех поддерживаемых языков. sp_helplanguage не является хранимой процедурой даты или времени. Однако настройка языка влияет на вывод функций даты. | Неприменимо | Неприменимо |
Функции, проверяющие значения даты и времени
Функция | Синтаксис | Возвращаемое значение | Тип возвращаемых данных | Детерминизм |
---|---|---|---|---|
ИСДАТА | ISDATE (выражение ) | Определяет, имеет ли входное выражение datetime или smalldatetime допустимое значение даты или времени. | Интервал | ISDATE является детерминированным, используется только с функцией CONVERT, когда указан параметр стиля CONVERT и когда стиль не равен 0, 100, 9, или 109. |
Артикул | Описание |
---|---|
ФОРМАТ | Возвращает значение, отформатированное в указанном формате и с необязательным языком и региональными параметрами. Используйте функцию FORMAT для форматирования дат/времени и числовых значений в виде строк с учетом региональных настроек. |
ПРИведение и ПРЕОБРАЗОВАНИЕ (Transact-SQL) | Предоставляет информацию о преобразовании значений даты и времени в строковые литералы и из них, а также в других форматах даты и времени. |
Запись международных операторов Transact-SQL | Содержит рекомендации по переносу баз данных и приложений баз данных, использующих операторы Transact-SQL с одного языка на другой или поддерживающих несколько языков. |
Скалярные функции ODBC (Transact-SQL) | Предоставляет информацию о скалярных функциях ODBC, доступных для использования в инструкциях Transact-SQL. Сюда входят функции даты и времени ODBC. |
В ЧАСОВОМ ПОЯСЕ (Transact-SQL) | Обеспечивает преобразование часового пояса. |
См. также
- Функции
- Типы данных (Transact-SQL)
раз (Transact-SQL) — SQL Server
- Статья
- 10 минут на чтение
Относится к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр Azure SQL Аналитика синапсов Azure Analytics Platform System (PDW)
Определяет время дня. Время не учитывает часовой пояс и основано на 24-часовом формате.
Примечание
Информация Informatica предоставляется клиентам PDW, использующим Informatica Connector.
время Описание
Свойство | Значение |
---|---|
Синтаксис | время [ ( дробная секундная шкала ) ] |
Применение | DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) |
Шкала долей секунды | Указывает количество цифр для дробной части секунд. Это может быть целое число от 0 до 7. Для Informatica это может быть целое число от 0 до 3. Дробная шкала по умолчанию — 7 (100 нс). |
Формат строкового литерала по умолчанию (используется для клиента нижнего уровня) | чч:мм:сс[.нннннн] для Informatica) Дополнительные сведения см. в разделе «Обратная совместимость для клиентов более ранних версий». |
Диапазон | 00:00:00.0000000 до 23:59:59.9999999 (00:00:00.000 до 23:59:59.999 для Informatica) |
Диапазоны элементов | чч — это две цифры от 0 до 23, обозначающие час. мм — это две цифры от 0 до 59, обозначающие минуты. сс — это две цифры от 0 до 59, обозначающие секунды. n* — это цифры от нуля до семи в диапазоне от 0 до 9999999, представляющие доли секунды. Для Informatica n* может быть от нуля до трех цифр в диапазоне от 0 до 999. |
Длина символа | От 8 позиций минимум (чч:мм:сс) до 16 максимум (чч:мм:сс.нннннн). Для Informatica максимальное значение равно 12 (чч:мм:сс.ннн). |
Точность, масштаб (пользователь указывает только масштаб) | См. таблицу ниже. |
Объем памяти | 5 байт, фиксированное значение по умолчанию с точностью до 100 нс долей секунды. В Informatica по умолчанию используется 4 фиксированных байта с точностью до 1 мс по умолчанию. |
Точность | 100 наносекунд (1 миллисекунда в Informatica) |
Значение по умолчанию | 00:00:00 Это значение используется для добавляемой части времени для неявного преобразования из date в datetime2 или datetimeoffset . |
Определяемая пользователем точность долей секунды | Да |
Уведомление о смещении часового пояса и его сохранение | № |
Летнее время | № |
Указанный масштаб | Результат (точность, масштаб) | Длина столбца (байты) | Дробный секунд точность |
---|---|---|---|
время | (16,7) [(12,3) в информатике] | 5 (4 в информатике) | 7 (3 в информатике) |
время(0) | (8,0) | 3 | 0-2 |
время(1) | (10,1) | 3 | 0-2 |
время(2) | (11,2) | 3 | 0-2 |
время(3) | (12,3) | 4 | 3-4 |
время(4) Не поддерживается в Informatica. | (13,4) | 4 | 3-4 |
время(5) Не поддерживается в Informatica. | (14,5) | 5 | 5-7 |
время(6) Не поддерживается в Informatica. | (15,6) | 5 | 5-7 |
время(7) Не поддерживается в Informatica. | (16,7) | 5 | 5-7 |
Поддерживаемые форматы строковых литералов для time
В следующей таблице показаны допустимые форматы строковых литералов для типа данных time .
SQL Server | Описание |
---|---|
чч:мм[:сс][:дробные секунды][AM][PM] чч:мм[:сс][.дробные секунды][AM][PM] ччAM[PM] чч AM[PM] | Значение часа, равное 0, представляет час после полуночи (AM), независимо от того, указано ли AM. PM нельзя указать, если час равен 0. Значения часов от 01 до 11 представляют часы до полудня, если не указано ни AM, ни PM. Значения представляют часы до полудня, когда указано AM. Значения представляют часы после полудня, если указано PM. Значение часа 12 представляет час, который начинается в полдень, если не указано ни AM, ни PM. Если указано AM, значение представляет час, который начинается в полночь. Если указано PM, значение представляет час, который начинается в полдень. Например, 12:01 — это 1 минута после полудня, как и 12:01; а 00:01 — это одна минута после полуночи. Указание 00:01 равнозначно указанию 00:01 или 00:01. Значения часов от 13 до 23 представляют часы после полудня, если AM или PM не указаны. Значения также представляют часы после полудня, когда указано PM. AM нельзя указать, если значение часа находится в диапазоне от 13 до 23. Значение часа 24 недопустимо. Чтобы обозначить полночь, используйте 12:00 или 00:00. Перед миллисекундами может стоять двоеточие (:) или точка (. ). Если используется двоеточие, число означает тысячные доли секунды. Если используется точка, одна цифра означает десятые доли секунды, две цифры означают сотые доли секунды, а три цифры означают тысячные доли секунды. Например, 12:30:20:1 означает 20 и одну тысячную секунды после 12:30; 12:30:20.1 указывает на 20 и одну десятую секунды после 12:30. |
ИСО 8601 | Примечания |
---|---|
чч:мм:сс чч:мм[:сс][.дробные секунды] | чч — это две цифры в диапазоне от 0 до 23, которые представляют количество часов в смещении часового пояса. мм — это две цифры от 0 до 59, которые представляют количество дополнительных минут в смещении часового пояса. |
ОДБК | Примечания |
---|---|
{t ‘чч:мм:сс[.дробные секунды]’} | Специфический API ODBC. |
Соответствие стандартам ANSI и ISO 8601
Использование часа 24 для обозначения полуночи и дополнительной секунды сверх 59, как определено в ISO 8601 (5. 3.2 и 5.3), не поддерживается для обратной совместимости и согласования с существующей датой и виды времени.
Строковый литеральный формат по умолчанию (используемый для клиента нижнего уровня) будет соответствовать стандартной форме SQL, которая определяется как чч:мм:сс[.нннннн]. Этот формат напоминает определение ВРЕМЕНИ в стандарте ISO 8601, за исключением долей секунды.
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты нижнего уровня не поддерживают типы данных time , date , datetime2 и datetimeoffset . В следующей таблице показано сопоставление типов между экземпляром SQL Server верхнего уровня и клиентами нижнего уровня.
Тип данных SQL Server | Формат строкового литерала по умолчанию передается клиенту более низкого уровня | ODBC нижнего уровня | Нижний уровень OLEDB | JDBC нижнего уровня | SQLCLIENT нижнего уровня |
---|---|---|---|---|---|
время | чч:мм:сс[. nnnnnn] | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRили DBTYPE_STR | Java.sql.String | Строка или SqString |
дата | ГГГГ-ММ-ДД | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRили DBTYPE_STR | Java.sql.String | Строка или SqString |
дата-время2 | ГГГГ-ММ-ДД чч:мм:сс[.nnnnnn] | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRили DBTYPE_STR | Java.sql.String | Строка или SqString |
смещение даты и времени | ГГГГ-ММ-ДД чч:мм:сс[.нннннн] [+|-]чч:мм | SQL_WVARCHAR или SQL_VARCHAR | DBTYPE_WSTRили DBTYPE_STR | Java.sql.String | Строка или SqString |
Преобразование данных даты и времени
При преобразовании в типы данных даты и времени SQL Server отклоняет все значения, которые он не может распознать как дату или время. Сведения об использовании функций CAST и CONVERT с данными даты и времени см. в разделе CAST и CONVERT (Transact-SQL)
Преобразование типа данных time(n) в другие типы даты и времени
Тип данных преобразуется в другие типы данных даты и времени.
При преобразовании в time(n) копируются часы, минуты и секунды. Когда точность назначения меньше точности источника, дробные секунды округляются в большую сторону, чтобы соответствовать точности назначения. В следующем примере показаны результаты преобразования значения time(4)
в значение time(3)
.
DECLARE @timeFrom time(4) = '12:34:54.1237'; ОБЪЯВИТЬ @timeTo time(3) = @timeFrom; ВЫБЕРИТЕ @timeTo AS 'время (3)', @timeFrom AS 'время (4)'; --Полученные результаты --время(3) время(4) -------------- ------------- --12:34:54.124 12:34:54.1237 -- --(затронута 1 строка)
Если выполняется преобразование в date , преобразование завершится ошибкой и появится сообщение об ошибке 206: «Конфликт типов операндов: дата несовместима со временем».
При преобразовании в datetime значения часов, минут и секунд копируются; и компонент даты установлен на «1900-01-01». Когда точность долей секунды значения time(n) превышает три цифры, результат datetime будет усечен. Следующий код показывает результаты преобразования time(4) значение
на значение datetime
.
DECLARE @time time(4) = '12:15:04.1237'; DECLARE @datetime datetime= @time; ВЫБРАТЬ @time AS '@time', @datetime AS '@datetime'; --Результат --@время @datetime --------------- ----------------------- --12:15:04.1237 1900-01-01 12:15:04.123 -- --(затронута 1 строка)
При преобразовании в smalldatetime для даты устанавливается значение «1900-01-01», а значения часов и минут округляются в большую сторону. Секунды и доли секунды установлены на 0. Следующий код показывает результаты преобразования time(4)
в значение smalldatetime
.
-- Показывает округление минутного значения. DECLARE @time time(4) = '12:15:59.9999'; DECLARE @smalldatetime smalldatetime= @time; ВЫБЕРИТЕ @time КАК '@time', @smalldatetime КАК '@smalldatetime'; --Результат @time @smalldatetime ---------------- ----------------------- 12:15:59.9999 1900-01-01 12:16:00-- --(затронута 1 строка) -- Показывает округление значения часа. ОБЪЯВИТЬ @time time(4) = '12:59:59,9999'; DECLARE @smalldatetime smalldatetime= @time; ВЫБЕРИТЕ @time КАК '@time', @smalldatetime КАК '@smalldatetime'; @time @smalldatetime ---------------- ----------------------- 12:59:59.9999 1900-01-01 13:00:00 (затронуты 1 ряд)
Если выполняется преобразование в datetimeoffset(n) , дата устанавливается на ‘1900-01-01’, а время копируется. Смещение часового пояса установлено на +00:00. Когда точность долей секунды time(n) 9Значение 0016 больше, чем точность значения datetimeoffset(n) , значение округляется в большую сторону. В следующем примере показаны результаты преобразования значения time(4)
в тип datetimeoffset(3)
.
DECLARE @time time(4) = '12:15:04.1237'; DECLARE @datetimeoffset datetimeoffset(3) = @time; SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset'; --Результат --@time @datetimeoffset --------------- ---------------- --12:15:04.1237 1900-01-01 12:15:04.124 +00:00 -- --(затронута 1 строка)
При преобразовании в datetime2(n) дата устанавливается на «1900-01-01», компонент времени копируется, а смещение часового пояса устанавливается на 00:00. Когда точность долей секунды значения datetime2(n) больше, чем значение time(n) , значение будет округлено до нужного размера. В следующем примере показаны результаты преобразования значения time(4)
в значение datetime2(2) 9.0355 значение.
DECLARE @time time(4) = '12:15:04.1237'; DECLARE @datetime2 datetime2(3) = @time; ВЫБЕРИТЕ @datetime2 КАК '@datetime2', @time КАК '@time'; --Результат --@datetime2 @время ------------------------- ------------- --1900-01-01 12:15:04. 124 12:15:04.1237 -- --(затронута 1 строка)
Преобразование строковых литералов в time(n)
Преобразование строковых литералов в типы даты и времени разрешено, если все части строк имеют допустимые форматы. В противном случае возникает ошибка времени выполнения. Неявные преобразования или явные преобразования, не определяющие стиль, из типов даты и времени в строковые литералы будут иметь формат по умолчанию для текущего сеанса. В следующей таблице показаны правила преобразования строкового литерала в время тип данных.
Литерал входной строки | Правило преобразования |
---|---|
ДАТА ODBC | Строковые литералы ODBCсопоставляются с типом данных datetime . Любая операция присваивания из литералов ODBC DATETIME в типы time вызовет неявное преобразование между datetime и этим типом, как определено правилами преобразования. |
ВРЕМЯ ODBC | См. выше правило ODBC DATE. |
ОДБК ДАТАВРЕМЯ | См. выше правило ODBC DATE. |
Только ДАТА | Предоставляются значения по умолчанию. |
Только ВРЕМЯ | Тривиальный |
Только ЧАСОВОЙ ПОЯС | Предоставляются значения по умолчанию. |
ДАТА + ВРЕМЯ | Используется часть входной строки TIME. |
ДАТА + ЧАСОВОЙ ПОЯС | Не разрешено. |
ВРЕМЯ + ЧАСОВОЙ ПОЯС | Используется часть входной строки TIME. |
ДАТА + ВРЕМЯ + ЧАСОВОЙ ПОЯС | Будет использоваться часть TIME локального DATETIME. |
Примеры
A. Сравнение типов данных даты и времени
В следующем примере сравниваются результаты приведения строки к каждому типу данных date и time .
ВЫБОР CAST('2007-05-08 12:35:29. 1234567 +12:15' КАК время(7)) КАК 'время' ,КАСТ('2007-05-08 12:35:29. 1234567 +12:15' Дата по AS) Дата по AS ,CAST('2007-05-08 12:35:29.123' КАК smalldatetime) КАК 'маленькая дата и время' ,CAST('2007-05-08 12:35:29.123' КАК дата-время) КАК 'дата-время' ,CAST('2007-05-08 12:35:29. 1234567 +12:15' КАК datetime2(7)) КАК 'дата-время2' ,CAST('2007-05-08 12:35:29.1234567 +12:15' КАК datetimeoffset(7)) КАК 'смещение даты и времени';
Тип данных | Выход |
---|---|
время | 12:35:29. 1234567 |
дата | 08.05.2007 |
малая дата и время | 08.05.2007 12:35:00 |
дата-время | 08.05.2007 12:35:29.123 |
дата-время2 | 08. 05.2007 12:35:29. 1234567 |
смещение даты и времени | 08.05.2007 12:35:29.1234567 +12:15 |
B. Вставка допустимых строковых литералов времени в столбец time(7)
В следующей таблице перечислены различные строковые литералы, которые можно вставлять в столбец типа данных time(7) со значениями, которые затем сохраняются в ту колонку.
Тип формата строкового литерала | Вставлен строковый литерал | значение времени(7), которое сохраняется | Описание |
---|---|---|---|
SQL Server | '01:01:01:123AM' | 01:01:01.1230000 | Если перед точностью до долей секунды стоит двоеточие (:), шкала не может превышать трех позиций, иначе возникнет ошибка. |
SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | Если указано время AM или PM, время сохраняется в 24-часовом формате без буквального AM или PM |
SQL Server | '01:01:01. 1234567 PM' | 13:01:01.1234567 | Если указано время AM или PM, время сохраняется в 24-часовом формате без буквального AM или PM |
SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | Пробел перед AM или PM необязателен. |
SQL Server | '01:00' | 01:00:00.0000000 | Если указан только час, все остальные значения равны 0. |
SQL Server | '01:00' | 01:00:00.0000000 | Пробел перед AM или PM необязателен. |
SQL Server | '01:01:01' | 01:01:01.0000000 | Если точность долей секунды не указана, каждая позиция, определяемая типом данных, равна 0. |
ИСО 8601 | '01:01:01.1234567' | 01:01:01.1234567 | Чтобы соответствовать ISO 8601, используйте 24-часовой формат, а не AM или PM. |
ИСО 8601 | '01:01:01. 1234567 +01:01' | 01:01:01.1234567 | Необязательная разница часовых поясов (TZD) разрешена во входных данных, но не сохраняется. |
C. Вставка литерала строки времени в столбцы каждого типа даты и времени
В следующей таблице в первом столбце показан литерал строки времени, который должен быть вставлен в столбец таблицы базы данных с типом данных даты или времени, показанным в второй столбец. В третьем столбце показано значение, которое будет храниться в столбце таблицы базы данных.
Вставленный строковый литерал | Тип данных столбца | Значение, хранящееся в столбце | Описание |
---|---|---|---|
'12:12:12.1234567' | время(7) | 12:12:12.1234567 | Если точность долей секунды превышает значение, указанное для столбца, строка будет усечена без ошибки. |
'2007-05-07' | дата | НОЛЬ | Любое значение времени приведет к ошибке оператора INSERT. |