数据库日期时间类型笔记


前言

整理数据库日期时间类型方便使用时查找


ISO-8601 日期和时间表示方法简介

特殊字符 - , : , T , Z

  • -(减号)用于年月日分割
  • :(冒号)用于时分秒分割
  • T用于日期与时间分割
  • Z代表UTC

常用例子

  • 当前时区
    2021-04-06T23:08:07.442902
    2021-04-06T23:08:07
  • UTC
    2021-04-06T23:08:07.442902Z
    2021-04-06T23:08:07Z
  • 偏移时区
    2021-04-06T23:08:07.442902+08:00
    2021-04-06T23:08:07.442902+8
    2021-04-06T23:08:07+08:00
    2021-04-06T23:08:07+8

MySql8.0.x : DATE, TIME, DATETIME, TIMESTAMP, YEAR. (5种)

0值显示

Data Type“Zero” Value
DATE‘0000-00-00’
TIME‘00:00:00’
DATETIME‘0000-00-00 00:00:00’
TIMESTAMP‘0000-00-00 00:00:00’
YEAR0000

范围

Data Type最小值最大值
DATE1000-01-019999-12-31
TIME
TIME(0)
-838:59:59838:59:59
TIME-838:59:59.000000838:59:59.000000
DATETIME
DATETIME(0)
1000-01-01 00:00:009999-12-31 23:59:59
DATETIME(6)1000-01-01 00:00:00.0000009999-12-31 23:59:59.999999
TIMESTAMP
TIMESTAMP(0)
1970-01-01 00:00:012038-01-19 03:14:07
TIMESTAMP(6)1970-01-01 00:00:01.0000002038-01-19 03:14:07.999999
YEAR
YEAR(4)
19012155

SqlServer 2019 (没有 timestamp )

官方建议使用 time、date、datetime2 和 datetimeoffset 数据类型

在这里插入图片描述

官方文档链接-日期和时间数据类型及函数 (Transact-SQL)

日期和时间数据类型

数据类型格式范围精确度存储大小(字节)用户定义的秒的小数部分精度时区偏移量
timehh:mm:ss[.nnnnnnn]00:00:00.0000000 到 23:59:59.9999999100 纳秒3 到 5
dateYYYY-MM-DD0001-01-01 到 31.12.991 天3
smalldatetimeYYYY-MM-DD hh:mm:ss1900-01-01 到 2079-06-061 分钟4
datetimeYYYY-MM-DD hh:mm:ss[.nnn]1753-01-01 到 9999-12-310.00333 秒8
datetime2YYYY-MM-DD hh:mm:ss[.nnnnnnn]0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999100 纳秒6 到 8
datetimeoffsetYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+-]hh:mm0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999(以 UTC 时间表示)100 纳秒8 到 10

返回结果示例

在这里插入图片描述

date和datetime支持 / - . 拆分年月日 datetime2只支持 连字符 (-)

date和datetime支持正斜杠符号 (/)、连字符 (-) 或句点 (.) 作为分隔符的字符串中指定年、月、日。

  • 2021/04/07
  • 2021-04-07
  • 2021.04.07

date

properties
语法date
示例CREATE TABLE Table1 ( Column1 date)
默认的字符串文字格式YYYY-MM-DD
范围0001-01-01 到 9999-12-31(对于 Informatica,为 1582-10-15 到 9999-12-31)
字符长度10 位
精度10
小数位数0
存储大小固定 3 个字节
精确度一天
默认值1900-01-01
日历公历
夏时制感知

支持使用斜线 (/)、连字符 (-) 或句点 (.) 作为分隔符。

time

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库
定义一天中的某个时间。 此时间不能感知时区且基于 24 小时制。
备注

使用 Informatica 连接器为 PDW 客户提供 Informatica 信息。

time 说明

属性
语法time [ (fractional second scale) ]
示例CREATE TABLE Table1 ( Column1 time(7))
fractional seconds scale
括号里的值
为秒的小数部分指定数字的位数。
这可以是从 0 到 7 的整数。
对于 Informatica,这可以是从 0 到 3 的整数。
默认小数位数为 7 (100ns)。
默认的字符串文字格式对于 Informatica,为 hh:mm:ss[.nnnnnnn])
范围00:00:00.0000000 到 23:59:59.9999999(对于 Informatica,为 00:00:00.000 到 23:59:59.999)
各元素的范围hh 是表示小时的两位数字,范围为 0 到 23。
mm 是表示分钟的两位数字,范围为 0 到 59。
ss 是表示秒的两位数字,范围为 0 到 59。
n* 是 0 到 7 位数字,范围为 0 到 9999999,它表示秒的小数部分。
对于 Informatica,n* 是零到三位数字,范围为 0 到 999。
字符长度最小 8 位 (hh:mm:ss),最大 16 位 (hh:mm:ss.nnnnnnn)。 对于 Informatica,最大值为 12 位 (hh:mm:ss.nnn)。
精度、小数位数请参阅下表。(用户只能指定小数位数)
存储大小固定 5 个字节,是使用默认的 100ns 秒的小数部分精度时的默认存储大小。 在 Informatica 中,默认为 4 个字节,固定不变,同时秒的小数部分精度默认为 1 毫秒。
精确度100 纳秒(Informatica 中为 1 毫秒)
默认值00:00:00
此值用作从 date 隐式转换到datetime2 或 datetimeoffset 时追加的时间部分。
用户定义的秒的小数部分精度
时区偏移量感知和保留
夏时制感知
指定的小数位数结果 (精度, 小数位数)列长度(以字节为单位)小数
time(16,7)[Informatica 中为 (12,3)]5(Informatica 中为 4)7(Informatica 中为 3)
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)Informatica 中不支持。(13,4)43-4
time(5)Informatica 中不支持。(14,5)55-7
time(6)Informatica 中不支持。(15,6)55-7
time(7)Informatica 中不支持。(16,7)55-7

datetime

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库
用于定义一个与采用 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 值舍入到 .000、.003、或 .007 秒的增量。

用户指定的值系统存储的值
01/01/98 23:59:59.9991998-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

datetime2

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库
定义结合了 24 小时制时间的日期。 可将 datetime2 视作现有 datetime 类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义的精度。

datetime2 说明

属性
语法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 到 31.12.99
公元 1 年 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,它表示秒小数部分。 在 Informatica 中,当 n > 3 时,秒的小数部分会被截断。
字符长度最低 19 位 (YYYY-MM-DD hh:mm:ss ),最高 27 位 (YYYY-MM-DD hh:mm:ss.0000000)
精度、小数位数0 至 7 位,准确度为 100ns。 默认精度为 7 位数。
存储大小 1精度小于 3 的 6 个字节。
精度为 3 和 4 的 6 个字节。
所有其他精度需要 8 个字节。2
精确度100 纳秒
默认值1900-01-01 00:00:00
日历公历
用户定义的秒的小数部分精度
时区偏移量感知和保留
夏时制感知

1 提供的值用于未压缩的行存储。 使用数据压缩或列存储可能会改变每个精度的存储大小。 此外,磁盘上和内存中的存储大小可能有所不同。 例如,采用批处理模式时,datetime2 值始终需要 8 个字节的内存。
2 datetime2 值强制转换为 varbinary 值时,会向 varbinary 值添加一个额外的字节,用于存储精度 。

datetime2 支持的字符串文字格式

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”。

datetimeoffset (在 SQL Server 2008 中首次引入。)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库
用于定义一个与采用 24 小时制并可识别时区的一日内时间相组合的日期。

datetimeoffset 说明

属性
语法datetimeoffset [ (fractional seconds precision) ]
使用情况DECLARE @MyDatetimeoffset datetimeoffset(7)
CREATE TABLE Table1 (Column1 datetimeoffset(7))
默认字符串文字格式(用于下级客户端)YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+
日期范围0001-01-01 到 31.12.99
公元 1 年 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 {+
精度、小数位数请参阅下表。
存储大小默认值为 10 个字节的固定大小,默认的秒的小数部分精度为 100ns。
精确度100 纳秒
默认值1900-01-01 00:00:00 00:00
日历公历
用户定义的秒的小数部分精度
时区偏移量感知和保留
夏时制感知
指定的小数位数结果 (精度, 小数位数)列长度(以字节为单位)秒的小数部分精度
datetimeoffset(34,7)107
datetimeoffset(0)(26,0)80-2
datetimeoffset(1)(28,1)80-2
datetimeoffset(2)(29,2)80-2
datetimeoffset(3)(30,3)93-4
datetimeoffset(4)(31,4)93-4
datetimeoffset(5)(32,5)105-7
datetimeoffset(6)(33,6)105-7
datetimeoffset(7)(34,7)105-7

datetimeoffset 支持的 ISO-8061 字符串文字格式

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。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值