MSSQL2008中的时间日期类型摘录

datetime

    用于定义一个与采用24小时制并带有秒小数部分的一日时间组合的日期。

       注意

           对于性的工作,请使用time、 date、 datetime2 和datetimeoffset数据类型。这些数据类型符合SQL标准。它们更便于移植。time、datetime2和datetimeoffset提供更高精度的秒数。datetimeoffset为全局部署的应用提供时区支持。

     datetime说明

           

属性

语法

datetime

用法

DECLARE @MyDatetime datetime

CREATE TABLE Table1 ( Column1 datetime )

默认的字符串文字格式

(用于下级客户端)

不适用

日期范围

1753 年 1 月 1 日到 9999 年 12 月 31 日

时间范围

00:00:00 到 23:59:59.997

时区偏移量范围

各元素的范围

YYYY 是表示年份的四位数字,范围为 1753 到 9999。

MM 是表示指定年份中的月份的两位数字,范围为 01 到 12。

DD 是表示指定月份中的某一天的两位数字,范围为 01 到 31(最高值取决于相应月份)。

hh 是表示小时的两位数字,范围为 00 到 23。

mm 是表示分钟的两位数字,范围为 00 到 59。

ss 是表示秒钟的两位数字,范围为 00 到 59。

n* 为一个 0 到 3 位的数字,范围为 0 到 999,表示秒的小数部分。

字符长度

最低 19 位到最高 23 位

存储大小

8 字节

精确度

舍入到 .000、.003 或 .007 秒三个增量。

默认值

1900-01-01 00:00:00

日历

公历(不包括完整的年份范围。)

用户定义的秒的小数部分精度

时区偏移量感知和保留

夏时制感知

以下各表列出了 datetime 支持的字符串文字格式。datetime 字符串文字位于单引号 (') 中,例如 'string_literaL',但 ODBC 除外。如果环境不是 us_english,则字符串文字应采用 N'string_literaL' 格式。

数值

说明

日期格式:

[0]4/15/[19]96 -- (mdy)

[0]4-15-[19]96 -- (mdy)

[0]4.15.[19]96 -- (mdy)

[0]4/[19]96/15 -- (myd)

15/[0]4/[19]96 -- (dmy)

15/[19]96/[0]4 -- (dym)

[19]96/15/[0]4 -- (ydm)

[19]96/[0]4/15 -- (ymd)

时间格式:

14:30

14:30[:20:999]

14:30[:20.9]

4am

4 PM

您可以指定日期数据,其中月份也通过数值指定。例如,5/20/97 表示 1997 年 5 月 20 日。采用数值日期格式时,可在字符串中使用斜线 (/)、连字符 (-) 或句点 (.)作为分隔符来指定月、日、年。此字符串必须采用以下格式:

  • 数字 分隔符 数字 分隔符 数字 [时间] [时间]

当语言设置为 us_english 时,默认的日期顺序是 mdy。可以使用 SET DATEFORMAT 语句更改日期顺序。

SET DATEFORMAT 的设置决定了如何解释日期值。如果顺序和设置不匹配,这些值将由于超出范围而不会被解释成日期,或者被错误地解释。例如,12/10/08 可以解释成六个不同的日期,具体解释为哪一日期取决于 DATEFORMAT 的设置。四位数字的年份被解释为年。

字母

说明

Apr[il] [15][,] 1996

Apr[il] 15[,] [19]96

Apr[il] 1996 [15]

[15] Apr[il][,] 1996

15 Apr[il][,][19]96

15 [19]96 apr[il]

[15] 1996 apr[il]

1996 APR[IL] [15]

1996 [15] APR[IL]

您可以指定一个日期数据,其中使用完整的月份名称来指定月份。例如,月份用英语 April 或使用其缩写 Apr 指定;逗号是可选的,且忽略大小写。

下面是使用字母日期格式的一些准则:

  • 日期和时间数据要放在单引号 (') 内。对于英语以外的其他语言,使用 N'。

  • 方括号中的字符是可选的。

  • 如果只指定年份的最后两位数字,则小于两位数年份截止配置选项值最后两位数字的值与截止年份处于同一个世纪。大于或等于该选项值的值处于截止年份的上一个世纪。例如,如果“两位数年份截止”为 2050(默认值),则 25 将被解释为 2025 年,而 50 将被解释为 1950 年。为避免模糊不清,请使用四位数的年份。

  • 如果没有指定日,则默认值为当月第一天。

当按字母形式指定月份时,SET DATEFORMAT 会话设置不起作用。

ISO 8601

说明

YYYY-MM-DDThh:mm:ss[.mmm]

YYYYMMDDThh:mm:ss[.mmm]

示例:

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.487

若要使用 ISO 8601 格式,必须按此格式指定每一个元素。这也包括显示在此格式中的 T、冒号 (:)和句点 (.)。

方括号表示秒小数部分是可选的。时间部分按 24 小时制指定。

T 表示其后是 datetime 值的时间部分。

使用 ISO 8601 格式的优点是它是一种国际标准,不会产生模糊的指定。同时,此格式不受 SET DATEFORMAT 或 SET LANGUAGE设置的影响。

未分隔的

说明

YYYYMMDD hh:mm:ss[.mmm]

ODBC

说明

{ ts '1998-05-02 01:23:56.123' }

{ d '1990-10-02' }

{ t '13:33:41' }

ODBC API 用于定义转义序列以表示日期和时间值,ODBC 称之为时间戳数据。Microsoft OLE DB Provider for SQL Server 所支持的 OLE DB 语言定义 (DBGUID-SQL) 也支持这种 ODBC 时间戳格式。使用 ADO、OLE DB 和基于 ODBC 的 API 的应用程序可以使用这种 ODBC 时间戳格式来表示日期和时间。

ODBC 时间戳的转义序列格式为:{ literal_type 'constant_value' }:

  • literal_type 指定转义序列的类型。时间戳有三个 literal_type 说明符:

    • d = 仅日期

    • t = 仅时间

    • ts = 时间戳(时间 + 日期)

  • 'constant_value' 是转义序列的值。constant_value 必须遵循下面每个 literal_type 的格式。

    literal_type constant_value 格式
    d yyyy-mm-dd
    t hh:mm:ss[.fff]
    ts yyyy-mm-dd hh:mm:ss[.fff]

如下表所示,将 datetime 值舍入到 .000、.003、或 .007 秒的增量。

用户指定的值

系统存储的值

01/01/98 23:59:59.999

1998-01-02 00:00:00.000

01/01/98 23:59:59.995

01/01/98 23:59:59.996

01/01/98 23:59:59.997

01/01/98 23:59:59.998

1998-01-01 23:59:59.997

01/01/98 23:59:59.992

01/01/98 23:59:59.993

01/01/98 23:59:59.994

1998-01-01 23:59:59.993

01/01/98 23:59:59.990

01/01/98 23:59:59.991

1998-01-01 23:59:59.990

datetime 不遵从 ANSI 或 ISO 8601。

下例比较了将一个字符串分别转换为各种 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

datetime2 (Transact-SQL)

SQL Server 2008 R2
此主题尚未评级 评价此主题

定义结合了 24 小时制时间的日期。可将 datetime2 视作现有 datetime 类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义的精度。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

属性

语法

datetime2 [ (fractional seconds precision) ]

用法

DECLARE @MyDatetime2 datetime2(7)

CREATE TABLE Table1 ( Column1 datetime2(7) )

默认的字符串文字格式

(用于下级客户端)

YYYY-MM-DD hh:mm:ss[.fractional seconds]

有关详细信息,请参阅使用日期和时间数据的“下级客户端的向后兼容性”部分。

日期范围

0001-01-01 到 9999-12-31

公元元年 1 月 1 日到公元 9999 年 12 月 31 日

时间范围

00:00:00 到 23:59:59.9999999

时区偏移量范围

各元素的范围

YYYY 是一个四位数,范围从 0001 到 9999,表示年份。

MM 是一个两位数,范围从 01 到 12,它表示指定年份中的月份。

DD 是一个两位数,范围为 01 到 31(具体取决于月份),它表示指定月份中的某一天。

hh 是一个两位数,范围从 00 到 23,它表示小时。

mm 是一个两位数,范围从 00 到 59,它表示分钟。

ss 是一个两位数,范围从 00 到 59,它表示秒钟。

n* 代表 0 到 7 位数字,范围从 0 到 9999999,它表示秒小数部分。

字符长度

最低 19 位 (YYYY-MM-DD hh:mm:ss ),最高 27 位 (YYYY-MM-DD hh:mm:ss.0000000)

精度、小数位数

0 至 7 位,准确度为 100ns。默认精度为 7 位数。

存储大小

精度小于 3 时为 6 个字节;精度为 3 和 4 时为 7 个字节。所有其他精度则需要 8 个字节。

精确度

100 纳秒

默认值

1900-01-01 00:00:00

日历

公历

用户定义的秒的小数部分精度

时区偏移量感知和保留

夏时制感知

有关数据类型元数据,请参阅 sys.systypes (Transact-SQL) 或 TYPEPROPERTY (Transact-SQL)。某些日期和时间数据类型的精度和小数位数是可变的。若要获取列的精度和小数位数,请参阅 COLUMNPROPERTY (Transact-SQL)COL_LENGTH (Transact-SQL) 或 sys.columns (Transact-SQL)

以下各表列出了适用于 datetime2 的支持的 ISO 8601 和 ODBC 字符串文字格式。有关 datetime2 日期和时间部分的字母、数字、未分隔和时间格式的信息,请参阅日期 (Transact-SQL)time (Transact-SQL)

ISO 8601

说明

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

此格式不受 SET LANGUAGE 和 SET DATEFORMAT 会话区域设置的影响。T、冒号 (:) 和句点 (.) 包括在字符串文字之内,如“2007-05-02T19:58:47.1234567”。

ODBC

说明

{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' }

特定于 ODBC API:

  • 小数点右侧的数字表示秒小数部分,可指定 0 到 7 位(100 纳秒)。

  • 在 SQL Server 2008 中,当兼容级别设置为 10 时,文字将在内部映射到新的 time 类型。

datetime2 符合日期时间的 ANSI 和 ISO 8601 标准。

下例比较了将一个字符串转换为各种 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

 

datetimeoffset (Transact-SQL)

SQL Server 2008 R2
1(共 1)对本文的评价是有帮助 评价此主题

用于定义一个与采用 24 小时制并可识别时区的一日内时间相组合的日期。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

属性

语法

datetimeoffset [ (fractional seconds precision) ]

用法

DECLARE @MyDatetimeoffset datetimeoffset(7)

CREATE TABLE Table1 ( Column1 datetimeoffset(7) )

默认字符串文字格式(用于下级客户端)

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]

有关详细信息,请参阅使用日期和时间数据的“下级客户端的向后兼容性”部分。

日期范围

0001-01-01 到 9999-12-31

公元元年 1 月 1 日到公元 9999 年 12 月 31 日

时间范围

00:00:00 到 23:59:59.9999999

时区偏移量范围

  • -14:00 到 +14:00

各元素的范围

YYYY 是表示年份的四位数字,范围为 0001 到 9999。

MM 是表示指定年份中的月份的两位数字,范围为 01 到 12。

DD 是表示指定月份中的某一天的两位数字,范围为 01 到 31(最高值取决于相应月份)。

hh 是表示小时的两位数字,范围为 00 到 23。

mm 是表示分钟的两位数字,范围为 00 到 59。

ss 是表示秒钟的两位数字,范围为 00 到 59。

n* 是 0 到 7 位数字,范围为 0 到 9999999,它表示秒的小数部分。

hh 是两位数,范围为 -14 到 +14。

mm 是两位数,范围为 00 到 59。

字符长度

最低 26 位 (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) 到最高 34 位 (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)

精度、小数位数

指定的小数位数 结果 (精度, 小数位数) 列长度(以字节为单位) 秒的小数部分精度
datetimeoffset (34,7) 10 7
datetimeoffset(0) (26,0) 8 0-2
datetimeoffset(1) (28,1) 8 0-2
datetimeoffset(2) (29,2) 8 0-2
datetimeoffset(3) (30,3) 9 3-4
datetimeoffset(4) (31,4) 9 3-4
datetimeoffset(5) (32,5) 10 5-7
datetimeoffset(6) (33,6) 10 5-7
datetimeoffset(7) (34,7) 10 5-7

存储大小

默认值为 10 个字节的固定大小,默认的秒的小数部分精度为 100ns。

精确度

100 纳秒

默认值

1900-01-01 00:00:00 00:00

日历

公历

用户定义的秒的小数部分精度

时区偏移量感知和保留

夏时制感知

下表列出了 datetimeoffset 支持的 ISO 8601 字符串文字格式。有关 datetimeoffset 日期和时间部分的字母、数值、未分隔的字符串文字格式和时间格式的信息,请参阅 日期 (Transact-SQL) 和 time (Transact-SQL)

ISO 8601

说明

YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

这两种格式不受 SET LANGUAGE 和 SET DATEFORMAT 会话的区域设置的影响。datetimeoffset 与 datetime 部分之间不允许有空格。

YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC)

这种遵从 ISO 定义的格式表明 datetime 部分应采用协调世界时 (UTC) 表示。例如,1999-12-12 12:30:30.12345 -07:00 应表示为 1999-12-12 19:30:30.12345Z。

时区偏移量指定某个 time 或 datetime 值相对于 UTC 的时区偏移量。时区偏移量可以表示为 [+|-] hh:mm:

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

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

  • 时区偏移量中必须包含 +(加)或 –(减)号。这两个符号表示是在 UTC 时间的基础上加上还是从中减去时区偏移量以得出本地时间。时区偏移量的有效范围为 -14:00 到 +14:00。

时区偏移量的范围遵循 XSD 架构定义的 W3C XML 标准,与 SQL 2003 标准定义(12:59 到 +14:00)略有不同。

可选的类型参数 fractional seconds precision 指定了秒小数部分的位数。该值可以是一个 0 到 7(100 纳秒)的整数。默认 fractional seconds precision 为 100ns(秒小数部分有 7 位)。

此数据存储在数据库中,并以与 UTC 相同的方式在服务器中进行处理、比较、排序和索引。时区偏移量将保留在数据库中以供检索。

给定时区偏移量将假定为可以识别夏时制时间 (DST),并会针对 DST 期间内的任何给定 datetime 进行调整。

对于 datetimeoffset 类型,在插入、更新、转换或赋值操作中将验证 UTC 和本地(相对于一致的或转换的时区偏移量)datetime 值。如果检测到任何无效的 UTC 或本地(相对于一致的或转换的时区偏移量)datetime 值,将引发一个无效值错误。例如,9999-12-31 10:10:00 在 UTC 中有效,但在本地时间中会溢出时区偏移量 +13:50。

date 和 time 主题的“对 ANSI 和 ISO 8601 的遵从性”部分也适用于 datetimeoffset

下例比较了将一个字符串分别转换为各种 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'
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS
        'datetimeoffset IS08601';

下面是结果集:

数据类型

输出

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

 
 

smalldatetime (Transact-SQL)

SQL Server 2008 R2
1(共 1)对本文的评价是有帮助 评价此主题

定义结合了一天中的时间的日期。此时间为 24 小时制,秒始终为零 (:00),并且不带秒小数部分。

注意注意

对于新的工作,请使用 timedatedatetime2 和 datetimeoffset 数据类型。这些类型符合 SQL 标准。它们更易于移植。timedatetime2 和 datetimeoffset提供更高精度的秒数。datetimeoffset 为全局部署的应用程序提供时区支持。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

语法

smalldatetime

用法

DECLARE @MySmalldatetime smalldatetime

CREATE TABLE Table1 ( Column1 smalldatetime )

默认的字符串文字格式

(用于下级客户端)

不适用

日期范围

1900-01-01 到 2079-06-06

1900 年 1 月 1 日到 2079 年 6 月 6 日

时间范围

00:00:00 到 23:59:59

2007-05-09 23:59:59 将舍入为

2007-05-10 00:00:00

元素范围

YYYY 是表示年份的四位数字,范围为 1900 到 2079。

MM 是表示指定年份中的月份的两位数字,范围为 01 到 12。

DD 是表示指定月份中的某一天的两位数字,范围为 01 到 31(最高值取决于相应月份)。

hh 是表示小时的两位数字,范围为 00 到 23。

mm 是表示分钟的两位数字,范围为 00 到 59。

ss 是表示秒钟的两位数字,范围为 00 到 59。小于或等于 29.998 秒的值向下舍入为最接近的分钟数;大于或等于 29.999 秒的值向上舍入为最接近的分钟数。

字符长度

最高 19 位

存储大小

固定 4 个字节。

精确度

一分钟

默认值

1900-01-01 00:00:00

日历

公历

(不包括完整的年份范围。)

用户定义的秒的小数部分精度

时区偏移量感知和保留

夏时制感知

smalldatetime 不符合 ANSI 或 ISO 8601。

A. 将带秒数的字符串文字转换为 smalldatetime

下例比较了将字符串文字中的秒数转换成 smalldatetime 时产生的结果。

SELECT 
     CAST('2007-05-08 12:35:29'     AS smalldatetime)
    ,CAST('2007-05-08 12:35:30'     AS smalldatetime)
    ,CAST('2007-05-08 12:59:59.998' AS smalldatetime);

输入

输出

2007-05-08 12:35:29

2007-05-08 12:35:00

2007-05-08 12:35:30

2007-05-08 12:36:00

2007-05-08 12:59:59.998

2007-05-08 13:00:00

B. 比较日期和时间数据类型

下例比较了将一个字符串分别转换为各种日期和时间数据类型时所产生的结果。

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 (Transact-SQL)

SQL Server 2008 R2
1(共 1)对本文的评价是有帮助 评价此主题

定义一天中的某个时间。此时间不能感知时区且基于 24 小时制。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

属性

语法

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) 5 7
time(0) (8,0) 3 0-2
time(1) (10,1) 3 0-2
time(2) (11,2) 3 0-2
time(3) (12,3) 4 3-4
time(4) (13,4) 4 3-4
time(5) (14,5) 5 5-7
time(6) (15,6) 5 5-7
time(7) (16,7) 5 5-7

存储大小

固定 5 个字节,是使用默认的 100ns 秒的小数部分精度时的默认存储大小。

精确度

100 纳秒

默认值

00:00:00

此值用作从 date 隐式转换到 datetime2 或 datetimeoffset 时追加的时间部分。

用户定义的秒的小数部分精度

时区偏移量感知和保留

夏时制感知

下表显示的是适用于 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 中相同。

为满足向后兼容的需要以及与现有日期和时间类型保持一致,不支持 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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值