time (Transact-SQL)
Определяет время дня. Время без учета часового пояса в 24-часовом формате.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Описание типа данных time
Свойство |
Значение |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Синтаксис |
time [ (fractional second precision) ] |
||||||||||||||||||||||||||||||||||||||||
Использование |
DECLARE @MyTime time(7) CREATE TABLE Таблица1 (столбец1 time(7)) |
||||||||||||||||||||||||||||||||||||||||
fractional seconds precision |
Задает число знаков для долей секунды. Может быть целым числом от 0 до 7. Точность долей секунды по умолчанию равна 7 (100 нс). |
||||||||||||||||||||||||||||||||||||||||
Формат строковых литералов по умолчанию (используется для клиента нижнего уровня) |
чч:мм:сс[. ннннннн] Дополнительные сведения см. в подразделе «Обратная совместимость для клиентов низкого уровня» следующего раздела. |
||||||||||||||||||||||||||||||||||||||||
Диапазон |
От 00:00:00.0000000 до 23:59:59.9999999 |
||||||||||||||||||||||||||||||||||||||||
Диапазоны элементов |
Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 0 до 23. Обозначение мм состоит из двух цифр, представляющих минуты, и принимает значения от 0 до 59. Обозначение сс состоит из двух цифр, представляющих секунды, и принимает значения от 0 до 59. Обозначение n* может содержать от нуля до семи цифр, представляющих доли секунды, и принимает значения от 0 до 9999999. |
||||||||||||||||||||||||||||||||||||||||
Длина в символах |
Минимально 8 позиций (чч:мм:сс) до 16 максимально (чч:мм:сс. ннннннн) |
||||||||||||||||||||||||||||||||||||||||
Точность, масштаб (только пользовательский масштаб) |
|
||||||||||||||||||||||||||||||||||||||||
Объем памяти |
5 байт, по умолчанию используется фиксированная точность 100 нс. |
||||||||||||||||||||||||||||||||||||||||
Точность |
100 наносекунд |
||||||||||||||||||||||||||||||||||||||||
Значение по умолчанию |
00:00:00 Это значение используется для добавления компонента времени при неявном преобразовании типа данных date в тип данных datetime2 или datetimeoffset. |
||||||||||||||||||||||||||||||||||||||||
Определяемая пользователем точность в долях секунды |
Да |
||||||||||||||||||||||||||||||||||||||||
Учет и сохранение смещения часового пояса |
Нет |
||||||||||||||||||||||||||||||||||||||||
Учет перехода на летнее время |
Нет |
Поддерживаемые форматы строковых литералов для типа данных time
В следующей таблице приводятся допустимые форматы строковых литералов для типа данных time.
SQL Server |
Описание |
---|---|
чч:мм[сс][:доли секунд][AM][PM] чч:мм[сс][.доли секунд][AM][PM] ччAM[PM] чч AM[PM] |
Значение часа 0 означает час после полуночи (AM), независимо от указания литерала «AM». Если час равен 0, «PM» указывать нельзя. Значения часа от 01 до 11 представляют часы до полудня, если не задан параметр «AM» или «PM». Если задан параметр «AM», то эти значения так же представляют часы до полудня. Если указано «PM», то эти значения указывают на часы после полудня. Значение 12 представляет час, начавшийся в полдень, если не указано «PM» или «AM». Если указано «AM», это значение представляет час, начавшийся в полночь. Если указано «PM», то это значение представляет час, начавшийся в полдень. Например, 12:01 — это 1 минута после полудня, так же как и 12:01 PM, тогда как 12:01 AM — это 1 минута после полуночи. 12:01 АМ аналогично указанию 00:01 или 00:01 AM. Значения часов от 13 до 23 представляют часы после полудня, если не указано «AM» или «PM». Если задан параметр «PM», то эти значения также представляют часы после полудня. Если час принимает значение от 13 до 23, то указывать «AM» нельзя. Значение часа, равное 24, недопустимо. Для представления полночи используется 12:00 AM или 00:00. Миллисекундам может предшествовать либо двоеточие (:), либо точка (.). Число после двоеточия обозначает тысячные доли секунды. При использовании точки однозначное число обозначает десятые доли секунды, двузначное число — сотые, а трехзначное — тысячные доли секунды. Например: 12:30:20:1 означает 20 секунд и одну тысячную долю секунды после 12:30, 12:30:20.1 означает 20 секунд и одну десятую секунды после 12:30. |
ISO 8601 |
Примечания |
---|---|
чч:мм:сс чч:мм[:сс][.доли секунды] |
|
ODBC |
Примечания |
---|---|
{ t 'чч-мм-сс[.доли секунды]'} |
Зависит от API-интерфейса ODBC. |
Соответствие стандартам ANSI и ISO 8601
Использование 24-часового формата и секунды координации свыше 59 согласно стандарту ISO 8601 (5.3.2 и 5.3) не поддерживается с целью обратной совместимости и соответствия существующим форматам даты и времени.
Формат строковых литералов по умолчанию (который используется для клиента низкого уровня) соответствует стандарту языка SQL, определенному в форме чч.мм:сс[. ннннннн]. Такой формат напоминает определение стандарта ISO 8601 для типа TIME, за исключением долей секунд.
Обратная совместимость для клиентов нижнего уровня
Некоторые клиенты низкого уровня не поддерживают типы данных 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) в другие типы данных даты и времени
В следующей таблице описано, каким образом тип данных time преобразуется в другие типы даты и времени.
Тип данных, в который выполняется преобразование |
Дополнительные сведения о преобразовании |
---|---|
time(n) |
Копируются часы, минуты и секунды. Если целевая точность меньше исходной точности, доли секунд будут округлены в сторону увеличения, чтобы соответствовать целевой точности. Следующий пример показывает результаты преобразования значения time(4) в значение time(3).
|
date |
Преобразование завершается ошибкой 206: «Конфликт типов операндов: тип date несовместим с типом time». |
datetime |
Значения часов, минут и секунд копируются; для компонента даты устанавливается значение «1900-01-01». Если точность в долях секунды значения типа time(n) больше трех цифр, результат типа datetime будет усечен. Следующий код демонстрирует результаты преобразования значения time(4) в значение datetime.
|
smalldatetime |
Значения часов и минут округляются в сторону увеличения, и для даты устанавливается значение «1900-01-01». Секунды и доли секунд устанавливаются в значение 0. Следующий код демонстрирует результаты преобразования значения time(4) в значение smalldatetime.
|
datetimeoffset(n) |
Время копируется; для даты устанавливается значение «1900-01-01». Для смещения часового пояса устанавливается значение +00:00. Если точность в долях секунды значения типа time(n) больше, чем точность значения типа datetimeoffset(n), значение округляется в сторону увеличения. В следующем примере демонстрируются результаты преобразования значения типа time(4) в тип datetimeoffset(3).
|
datetime2(n) |
Для даты устанавливается значение 1900-01-01, компонент времени копируется, для смещения часового пояса устанавливается значение 00:00. Если точность в долях секунды значения типа datetime2(n) больше точности значения типа time(n), доли секунды округляются в сторону увеличения. Следующий пример показывает результаты преобразования значения time(4) в значение datetime2(2).
|
Преобразование строковых литералов в тип time(n)
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Иначе возникает ошибка времени выполнения. Явные или скрытые преобразования, в которых не задан стиль преобразования типов данных даты и времени в строковые литералы, будут проведены в формате по умолчанию для текущего сеанса. В следующей таблице приводятся правила преобразования строковых литералов в типы данных time.
Строковый литерал входа |
Правило преобразования |
---|---|
ODBC DATE |
Строковые литералы ODBC сопоставляются с типом данных datetime. Любая операция присваивания литералов ODBC DATETIME типам данных time вызывает неявное преобразование между данным типом и типом datetime согласно правилам преобразования. |
ODBC TIME |
См. правило ODBC DATE выше. |
ODBC DATETIME |
См. правило ODBC DATE выше. |
только DATE |
Указаны значения по умолчанию. |
только TIME |
Простейший |
только TIMEZONE |
Указаны значения по умолчанию. |
DATE + TIME |
Используется компонент TIME входной строки. |
DATE + TIMEZONE |
Не допускается. |
TIME + TIMEZONE |
Используется компонент TIME входной строки. |
DATE + TIME + TIMEZONE |
Используется компонент TIME локального значения 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 |
Б.Вставка допустимых строковых литералов времени в столбец time(7)
В следующей таблице приводится список строковых литералов, которые можно вставлять в столбец с типом данных time(7) вместе со значениями, хранящимися в этом столбце.
Формат строковых литералов |
Вставляемый строковый литерал |
Хранящееся значение time(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 AM' |
13:01:01.1234567 |
Если указан параметр «AM» или «PM», время сохраняется в 24-часовом формате без литерала «AM» или «PM». |
SQL Server |
'01:01:01.1234567PM' |
13:01:01.1234567 |
Пробел перед литералом «AM» или «PM» является необязательным. |
SQL Server |
'01AM' |
01:00:00.0000000 |
Если задан только час, все остальные значения равны 0. |
SQL Server |
'01 AM' |
01:00:00.0000000 |
Пробел перед литералом «AM» или «PM» является необязательным. |
SQL Server |
'01:01:01' |
01:01:01.0000000 |
Если не заданы доли секунды, каждая позиция, определяемая этим типом данных, равна 0. |
ISO 8601 |
'01:01:01.1234567' |
01:01:01.1234567 |
Для соответствия стандарту ISO 8601 используется 24-часовой формат, а не литералы «AM» и «PM». |
ISO 8601 |
'01:01:01.1234567 +01:01' |
01:01:01.1234567 |
Необязательная разница во времени (TZD) во входных данных разрешается, но не сохраняется. |
В.Вставка строкового литерала времени в столбцы каждого типа данных date и time
В следующей таблице в первом столбце показан строковый литерал времени, который должен вставляться в столбец типа данных date или time базы данных, представленный во втором столбце. В третьем столбце показано значение, которое будет сохранено в базе данных.
Вставляемый строковый литерал |
Тип данных столбца |
Значение, хранящееся в столбце |
Описание |
---|---|---|---|
'12:12:12.1234567' |
time(7) |
12:12:12.1234567 |
Если точность в долях секунды превышает значение, указанное для столбца, строка будет усечена без сообщения об ошибке. |
'2007-05-07' |
date |
NULL |
Любое значение времени вызовет ошибку инструкции INSERT. |
'12:12:12' |
smalldatetime |
1900-01-01 12:12:00 |
Любое значение долей секунды вызовет ошибку инструкции INSERT. |
'12:12:12.123' |
datetime |
1900-01-01 12:12:12.123 |
Любое значение долей секунды длиннее трех позиций вызовет ошибку инструкции INSERT. |
'12:12:12.1234567' |
datetime2(7) |
1900-01-01 12:12:12.1234567 |
Если точность в долях секунды превышает значение, указанное для столбца, строка будет усечена без сообщения об ошибке. |
'12:12:12.1234567' |
datetimeoffset(7) |
1900-01-01 12:12:12.1234567 +00:00 |
Если точность в долях секунды превышает значение, указанное для столбца, строка будет усечена без сообщения об ошибке. |