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


time (Transact-SQL)

Определяет время дня. Время без учета часового пояса в 24-часовом формате.

Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в разделе Функции даты и времени (Transact-SQL). Сведения и примеры, относящиеся к типам данных и функциям даты и времени, см. в разделе Использование данных даты и времени.

Описание типа данных time

Свойство

Значение

Синтаксис

time [ (fractional second precision) ]

Использование

DECLARE @MyTime time(7)

CREATE TABLE Таблица1 ( Столбец1 time(7) )

fractional seconds precision

Задает число знаков для долей секунды.

Может быть целым числом от 0 до 7.

Точность долей секунды по умолчанию равна 7 (100 нс).

Использование

DECLARE @MyTime time(7)

CREATE TABLE Таблица1 ( Столбец1 time(7) )

Формат строковых литералов по умолчанию

(используется для клиента нижнего уровня)

чч:мм:сс[.ннннннн]

Дополнительные сведения см. в подразделе «Обратная совместимость для клиентов нижнего уровня» раздела Использование данных даты и времени.

Диапазон

От 00:00:00.0000000 до 23:59:59.9999999

Диапазоны элементов

Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 0 до 23.

Обозначение мм состоит из двух цифр, представляющих минуты, и принимает значения от 0 до 59.

Обозначение сс состоит из двух цифр, представляющих секунды, и принимает значения от 0 до 59.

Обозначение n* может содержать от нуля до семи цифр, представляющих доли секунды, и принимает значения от 0 до 9999999.

Длина в символах

Минимально 8 позиций (чч:мм:сс) до 16 максимально (чч:мм:сс.ннннннн)

Точность, масштаб

(только пользовательский масштаб)

Указанный масштабРезультат (точность, масштаб)Длина столбца (в байтах)Дробная часть секунд точность
time (16,7)57
time(0) (8,0)30-2
time(1) (10,1)30-2
time(2) (11,2)30-2
time(3) (12,3)43-4
time(4) (13,4)43-4
time(5) (14,5)55-7
time(6) (15,6)55-7
time(7) (16,7)55-7

Объем памяти

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

Примечания

чч:мм:сс

чч:мм[:сс][.доли секунды]

  • чч — двузначное число от 0 до 14, представляющее количество часов в смещении часового пояса.

  • мм — двузначное число от 00до 59, представляющее количество дополнительных минут в смещении часового пояса.

ODBC

Примечания

{ t 'чч-мм-сс[.доли секунды]'}

Зависит от API-интерфейса ODBC.

Функции SQL Server 2008 аналогичны SQL Server 2005.

Соответствие типа данных time стандартам ANSI и ISO 8601

Использование 24-часового формата и секунды координации свыше 59 согласно стандарту ISO 8601 (5.3.2 и 5.3) не поддерживается с целью обратной совместимости и соответствия существующим форматам даты и времени. Они не определяются стандартом SQL 2003.

Формат строковых литералов по умолчанию (который используется для клиента нижнего уровня) соответствует стандарту языка SQL, определенному в форме чч.мм:сс[.ннннннн]. Такой формат напоминает определение стандарта ISO 8601 для типа TIME, за исключением долей секунд.

Примеры

А. Сравнение типов данных date и time

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

Если точность в долях секунды превышает значение, указанное для столбца, строка будет усечена без сообщения об ошибке.