time (Transact-SQL)
定义一天中的某个时间。此时间不能感知时区且基于 24 小时制。
有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据。
time 说明
属性  | 
值  | 
|---|---|
语法  | 
time [ (fractional second precision) ]  | 
用法  | 
DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) )  | 
fractional seconds precision  | 
为秒的小数部分指定数字的位数。 这可以是从 0 到 7 的整数。 默认的小数精度是 7 (100ns)。  | 
用法  | 
DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) )  | 
默认的字符串文字格式 (用于下级客户端)  | 
hh:mm:ss[.nnnnnnn] 有关详细信息,请参阅使用日期和时间数据的“下级客户端的向后兼容性”部分。  | 
范围  | 
00:00:00.0000000 到 23:59:59.9999999  | 
各元素的范围  | 
hh 是表示小时的两位数字,范围为 0 到 23。 mm 是表示分钟的两位数字,范围为 0 到 59。 ss 是表示秒的两位数字,范围为 0 到 59。 n* 是 0 到 7 位数字,范围为 0 到 9999999,它表示秒的小数部分。  | 
字符长度  | 
最小 8 位 (hh:mm:ss),最大 16 位 (hh:mm:ss.nnnnnnn)  | 
精度、小数位数 (用户只能指定小数位数)  | 
指定的小数位数结果 (精度, 小数位数)列长度(以字节为单位)小数 秒 精度
 
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 个字节,是使用默认的 100ns 秒的小数部分精度时的默认存储大小。  | 
精确度  | 
100 纳秒  | 
默认值  | 
00:00:00 此值用作从 date 隐式转换到 datetime2 或 datetimeoffset 时追加的时间部分。  | 
用户定义的秒的小数部分精度  | 
有  | 
时区偏移量感知和保留  | 
无  | 
夏时制感知  | 
无  | 
time 支持的字符串文字格式
下表显示的是适用于 time 数据类型的有效字符串文字格式。
SQL Server  | 
说明  | 
|---|---|
hh:mm[:ss][:fractional seconds][AM][PM] hh:mm[:ss][.fractional seconds][AM][PM] hhAM[PM] hh AM[PM]  | 
如果小时值为 0,则不论是否指定了 AM,都表示午夜 (AM) 后的小时。当小时值等于 0 时,不能指定 PM。 如果 AM 和 PM 均未指定,则小时值为 01 到 11 时,表示中午以前的小时。如果指定了 AM,则这些值表示中午以前的小时。如果指定了 PM,则这些值表示中午以后的小时。 如果既未指定 AM,也未指定 PM,则小时值 12 表示始于中午的小时。如果指定了 AM,则该值表示始于午夜的小时。如果指定了 PM,则该值表示始于中午的小时。例如:12:01 是指中午过后 1 分钟,与 12:01 PM 的含义相同,而 12:01 AM 则指午夜过后 1 分钟。指定 12:01 AM 与指定 00:01 或 00:01 AM 等效。 如果未指定 AM 或 PM,则小时值 13 到 23 表示中午以后的小时。如果指定了 PM,这些值也表示中午以后的小时。如果小时值为 13 到 23,不能指定 AM。 如果小时值为 24,则该值无效。若要表示午夜,请使用 12:00 AM 或 00:00。 可以在毫秒之前加上冒号 (:) 或者句点 (.)。如果使用冒号,这个数字表示千分之一秒。如果使用句点,则单个数字表示十分之一秒,两个数字表示百分之一秒,三个数字表示千分之一秒。例如,12:30:20:1 表示到了 12:30 后又过了二十又千分之一秒;12:30:20.1 表示到了 12:30 后又过了二十又十分之一秒。  | 
ISO 8601  | 
说明  | 
|---|---|
hh:mm:ss hh:mm[:ss][.fractional seconds]  | 
  | 
ODBC  | 
说明  | 
|---|---|
{t 'hh:mm:ss[.fractional seconds]'}  | 
特定于 ODBC API。 在 SQL Server 2008 中的工作方式与在 SQL Server 2005 中相同。  | 
time 对 ANSI 和 ISO 8601 标准的遵从性
为满足向后兼容的需要以及与现有日期和时间类型保持一致,不支持 ISO 8601(5.3.2 和 5.3)规定的如下用法:用 24 点表示午夜和允许大于 59 的闰秒。SQL 标准 2003 未规定这些用法。
默认字符串文字格式(用于下级客户端)将遵照 SQL 标准格式(定义为 hh:mm:ss[.nnnnnnn])。这种格式类似于 ISO 8601 对不包含秒小数部分的 TIME 的定义。
示例
A. 比较日期和时间数据类型
下例比较了将一个字符串分别转换为各种 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  | 
B. 将有效的时间字符串文字插入 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,则时间以不带 AM 或 PM 文字的 24 小时格式存储  | 
SQL Server  | 
'01:01:01.1234567 PM'  | 
13:01:01.1234567  | 
如果指定了 AM 或 PM,则时间以不带 AM 或 PM 文字的 24 小时格式存储  | 
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),但不存储它。  | 
C. 将时间字符串文字插入到各种日期和时间数据类型的列中
下表中的第一列显示的是时间字符串文字,第二列显示的是日期或时间数据类型,第一列中的时间字符串文字将插入到第二列中与之对应的数据类型的数据库表列中。第三列显示的是将存储在对应数据库表列中的值。
插入的字符串文字  | 
列数据类型  | 
存储在列中的值  | 
说明  | 
|---|---|---|---|
'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  | 
如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。  |