在工作中, 我们会用到很多日期和时间处理的函数, 这里我们为了方便, 来做一个使用总结, 不用每次都去查Google。
日期和时间操作
操作符 | 示例 | 结果 |
---|---|---|
+ | date ‘2012-08-08’ + interval ‘2’ day | 2012-08-10 |
+ | time ‘01:00’ + interval ‘3’ hour | 04:00:00.000 |
+ | timestamp ‘2012-08-08 01:00’ + interval ‘29’ hour | 2012-08-09 06:00:00.000 |
+ | timestamp ‘2012-10-31 01:00’ + interval ‘1’ month | 2012-11-30 01:00:00.000 |
+ | interval ‘2’ day + interval ‘3’ hour | 2 03:00:00.000 |
+ | interval ‘3’ year + interval ‘5’ month | 3-5 |
- | date ‘2012-08-08’ - interval ‘2’ day | 2012-08-06 |
- | time ‘01:00’ - interval ‘3’ hour | 22:00:00.000 |
- | timestamp ‘2012-08-08 01:00’ - interval ‘29’ hour | 2012-08-06 20:00:00.000 |
- | timestamp ‘2012-10-31 01:00’ - interval ‘1’ month | 2012-09-30 01:00:00.000 |
- | interval ‘2’ day - interval ‘3’ hour | 1 21:00:00.000 |
- | interval ‘3’ year - interval ‘5’ month | 2-7 |
当前日期、时间函数
current_date -> date
返回当前日期。1
2select current_date
-- 2021-01-17current_time -> time
返回当前时间(含时区)。1
2
3
4select current_time
-- 23:52:04.371 Asia/Shanghai
-- 这个结果看起来有点问题, 因为我执行该条命令的真实时间为 15:52:04.371 Asia/Shanghai
-- 可能是公司的Presto的时区设置有问题current_timestamp -> timestamp
返回当前的日期和时间(含时区)。1
2
3select current_timestamp
-- 2021-01-17 15:44:43.041 Asia/Shanghai
-- 和上面的比, 这条就正常了current_timezone() -> varchar
返回当前时区。1
2select current_timestamp
-- Asia/Shanghainow() -> timestamp
返回当前的日期和时间(含时区)。1
2select now()
-- 2021-01-17 15:44:43.041 Asia/Shanghailocaltime -> time
返回当前的时间1
2
3select localtime
-- 23:52:04.371
-- 遇到了和 current_time 一样的问题localtimestamp -> timestamp
返回当前的日期和时间1
2select localtimestamp
-- 2021-01-17 15:52:04.371
格式转换
- date(x) -> date
1
select date('2012-08-10')
等价于 CAST(x AS date)
。x 的两侧有空格 或者 x=’2012-8-10’ 都是可以正常转换的。
日期维度函数
按年
按月
按季度
按周
按天