4.5 SQL的数据类型与模式
4.5.1 SQL中的日期和时间类型
字符串转成日期和时间类型
从日期和时间中提取年月日时分秒等信息
SQL中获取当然日期和事件的函数
SQL支持的数据运算
什么是`时间间隔`类型
4.5 SQL的数据类型与模式
在第3章中,我们介绍了一些SQL
支持的固有数据类型,如整数类型、实数类型和字符类型。SQL
还支持一些其他的固有数据类型,我们将在下面描述。我们还将描述如何**在SQL
中创建基本的用户定义类型
**。
4.5.1 SQL中的日期和时间类型
除了我们在3.2节介绍过的基本数据类型以外,SQL
标准还支持与日期
和时间
相关的几种数据类型:date
:日历日期,包括年(四位)、月和日。time
:一天中的时间,包括小时、分和秒。可以用变量time(p)
来表示秒的小数点后的数字位数(这里默认值为0)。通过指定time with timezone
,还可以把时区信息连同时间一起存储。timestamp
:date
和time
的组合。可以用变量timestamp(p)
来表示秒的小数点后的数字位数(这里默认值为6
)。如果指定with timezone
,则时区信息也会被存储。
日期和时间类型的值可按如下方式说明:
1 | date '2001-04-25' |
日期类型必须按照如上年月日的格式顺序指定。time
和timestamp
的秒部分可能会有小数部分,像上述时间戳中的情况一样。
字符串转成日期和时间类型
我们可以利用cast e as t
形式的表达式来将一个字符串(或字符串表达式)e
转换成类型t
,其中t
是date
、time
、 timestamp
中的一种。字符串必须符合正确的格式,像本段开头说的那样。当需要时,时区信息可以从系统设置中得到。
从日期和时间中提取年月日时分秒等信息
我们可以利用extract(field from d)
,从date
或time
值d
中提取出单独的域,这里的域可以是year
、 month
、day
、hour
、 minute
或者second
中的任意一种。时区信息可以用timezone_hour
和timezone_minute
来提取。
1 | mysql> select extract(year from current_date()); |
SQL中获取当然日期和事件的函数
SQL
定义了一些函数以获取当前日期和时间。例如,
current_date
返回当前日期,current_time
返回当前时间(带有时区),- 还有
localtime
返回当前的本地时间(不带时区)。 - 时间戳(日期加上时间)由
current_timestamp
(带有时区) - 以及
localtimestamp
(本地日期和时间,不带时区)
1 | mysql> select current_date(); |
SQL支持的数据运算
SQL
允许在上面列出的所有类型上进行比较运算,也允许在各种数字类型上进行算术运算和比较运算。SQL
还支持interval
数据类型,它允许在日期、时间和时间间隔上进行计算。
什么是时间间隔
类型
例如,假设x和y都是date
类型,那么x-y就是时间间隔类型,其值为从日期x到日期y间隔
的天数。类似地,在日期或时间上加减一个时间间隔
将分别得到新的日期或时间