学习目标:
了解EXTRACT() 函数的用法
学习内容:
适用数据库
MySQL、PGSQL
× SQL server
(其他未测)
定义
EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。用于从一个date或者interval类型中截取到特定的部分
语法
EXTRACT(unit FROM date)
date 参数是合法的日期表达式,unit参数格式如下:
Unit 值 | 描述 |
---|---|
MICROSECOND | 毫秒 |
SECOND | 秒 |
MINUTE | 分 |
HOUR | 小时 |
DAY | 天 |
WEEK | 周 |
MONTH | 月 |
QUARTER | 季度 |
YEAR | 年 |
SECOND_MICROSECOND | 得到的是秒+毫秒 |
MINUTE_MICROSECOND | 得到的是分+秒+毫秒 |
MINUTE_SECOND | 得到的是分+秒 |
HOUR_MICROSECOND | 得到的是小时+分+秒+毫秒 |
HOUR_SECOND | 得到的是小时+分+秒 |
HOUR_MINUTE | 得到的是小时+分 |
DAY_MICROSECOND | 得到的是小时+分+秒+毫秒 |
DAY_SECOND | 得到的是小时+分+秒 |
DAY_MINUTE | 得到的是小时+分 |
DAY_HOUR | 得到的是小时 |
YEAR_MONTH | 得到的是年+月 |
返回时间日期特定部分
示例sql:
select extract(MICROSECOND from timestamp '2021-08-25 08:54:09.549'),
extract(SECOND from timestamp '2021-08-25 08:54:09.549'),
extract(MINUTE from timestamp '2021-08-25 08:54:09.549'),
extract(hour from timestamp '2021-08-25 08:54:09.549'),
extract(DAY from timestamp '2021-08-25 08:54:09.549'),
extract(WEEK from timestamp '2021-08-25 08:54:09.549'),
extract(MONTH from timestamp '2021-08-25 08:54:09.549'),
extract(QUARTER from timestamp '2021-08-25 08:54:09.549'),
extract(YEAR from timestamp '2021-08-25 08:54:09.549')
运行结果:
时间类型timestamp转date时,MICROSECOND、SECOND、MINUTE、 HOUR不适用
select extract(MICROSECOND from date '2021-08-25 08:54:09.549'),
extract(SECOND from date '2021-08-25 08:54:09.549'),
extract(MINUTE from date '2021-08-25 08:54:09.549'),
extract(hour from date '2021-08-25 08:54:09.549'),
extract(DAY from date '2021-08-25 08:54:09.549'),
extract(WEEK from date '2021-08-25 08:54:09.549'),
extract(MONTH from date '2021-08-25 08:54:09.549'),
extract(QUARTER from date '2021-08-25 08:54:09.549'),
extract(YEAR from date '2021-08-25 08:54:09.549')
获取两个日期之间的具体时间间隔
语法:
interval '{ integer | integer time_expr | time_expr }'
{ { day | hour | minute } [ ( leading_precision ) ] |
second [ ( leading_precision [, fractional_seconds_precision ] ) ] } [ to { day |
hour | minute | second [ (fractional_seconds_precision) ] } ]
leading_precision值的范围是0到9, 默认是2. time_expr的格式为:hh[:mi[:ss[.n]]] or mi[:ss[.n]] or ss[.n], n表示微秒.
范围值:
hour: 0 to 23
minute: 0 to 59
second: 0 to 59.999999999
示例:
interval '4 5:12:10.222' day to second(3) 表示: 4天5小时12分10.222秒
interval '4 5:12' day to minute 表示: 4天5小时12分
interval '400 5' day(3) to hour 表示: 400天5小时, 400为3为精度,所以"day(3)", 注意默认值为2.
interval '400' day(3) 表示: 400天
interval '11:12:10.2222222' hour to second(7) 表示: 11小时12分10.2222222秒
interval '11:20' hour to minute 表示: 11小时20分
interval '10' hour 表示: 10小时
interval '10:22' minute to second 表示: 10分22秒
interval '10' minute 表示: 10分
interval '4' day 表示: 4天
interval '25' hour 表示: 25小时
interval '40' minute 表示: 40分
interval '120' hour(3) 表示: 120小时
interval '30.12345' second(2,4) 表示: 30.1235秒, 因为该地方秒的后面精度设置为4, 要进行四舍五入.
interval '20' day - interval '240' hour = interval '10-0' day to second 表示: 20天 - 240小时 = 10天0秒
sql:
select interval '4 5:12:10.222' day to second(3),
interval '4 5:12' day to minute,
interval '400 5' day to hour,
interval '400' day,
interval '11:12:10.2222222' hour to second(7),
interval '11:20' hour to minute,
interval '10' hour,
interval '10:22' minute to second ,
interval '10' minute,
interval '4' day ,
interval '25' hour,
interval '40' minute ,
interval '120' hour,
interval '30.12345' second ,
interval '20' day - interval '240' hour,
interval '10-0' day to second
运行结果:
unit剩下的参数运行示例
select extract(SECOND_MICROSECOND from timestamp '2021-08-25 05:54:09.549'),
extract(MINUTE_MICROSECOND from timestamp '2021-08-25 05:54:09.549'),
extract(MINUTE_SECOND from timestamp '2021-08-25 05:54:09.549'),
extract(HOUR_MICROSECOND from timestamp '2021-08-25 05:54:09.549'),
extract(HOUR_SECOND from timestamp '2021-08-25 05:54:09.549'),
extract(HOUR_MINUTE from timestamp '2021-08-25 05:54:09.549'),
extract(DAY_MICROSECOND from timestamp '2021-08-25 05:54:09.549'),
extract(DAY_SECOND from timestamp '2021-08-25 05:54:09.549'),
extract(DAY_MINUTE from timestamp '2021-08-25 05:54:09.549'),
extract(DAY_HOUR from timestamp '2021-08-25 05:54:09.549'),
extract(YEAR_MONTH from timestamp '2021-08-25 05:54:09.549')
注意
- 只可以从一个date类型中截取年月日,从timestamp中获取年月日时分秒
- unit参数的后面11个在PGSQL中不可行,可在MySQL上运行
- DAY_与HOUR_结果相同
学习时间:
2021-08-25
总结
附:学习记录,方便查看