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]

  • hh 是两位数,范围为 0 到 14,它表示时区偏移量中的小时数。

  • mm 是两位数,范围为 0 到 59,它表示时区偏移量中的额外分钟数。

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

如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。