SQL-EXTRACT()

学习目标:

了解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)                 表示: 45小时1210.222interval '4 5:12' day to minute                         表示: 45小时12interval '400 5' day(3) to hour                         表示: 4005小时, 4003为精度,所以"day(3)", 注意默认值为2.

interval '400' day(3)                                   表示: 400interval '11:12:10.2222222' hour to second(7)           表示: 11小时1210.2222222interval '11:20' hour to minute                         表示: 11小时20interval '10' hour                                      表示: 10小时

interval '10:22' minute to second                         表示: 1022interval '10' minute                                     表示: 10interval '4' day                                         表示: 4interval '25' hour                                         表示: 25小时

interval '40' minute                                     表示: 40interval '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小时 = 100

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')

在这里插入图片描述
在这里插入图片描述

注意

  1. 只可以从一个date类型中截取年月日,从timestamp中获取年月日时分秒
  2. unit参数的后面11个在PGSQL中不可行,可在MySQL上运行
  3. DAY_与HOUR_结果相同

学习时间:

2021-08-25


总结

附:学习记录,方便查看

MySQL EXTRACT() 函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

slowly_jin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值