- 显示当前日期
select current_date
- hive上当前日期转成presto上的timestamp
select DATE_PARSE(cast(CURRENT_DATE as VARCHAR),'%Y-%m-%d')
- 精确到毫秒,并显示时区
select now()
- 显示前一天
select current_date - interval '1' day
- 字符串转时间
select date_parse('20210512','%Y%m%d')
- 时间转字符串
select date_format(current_date -interval '1' day,'%Y-%m-%d %T')
- 计算时间的函数
date_add(unit,value,timestamp)
其中unit为单位,可使用的有’day’,‘week’,'month’等等;value是偏移量,正数表示计算未来的时间,负数则是历史时间;
例:select date_add(‘week’,10,current_date) 显示 2021-10-14 select date_add(‘month’,-3,cast(‘2021-04-01’ as date)) 显示 2021-01-01
- 计算时间差
date_diff(unit,timestamp1,timestamp2)
例:
- select date_diff(‘day’,cast(‘2021-08-01’ as date),date_parse(‘20210512’,’%Y%m%d’)) 显示 -81
- select date_diff(‘month’,cast(‘2021-08-01’ as date),date_parse(‘20210512’,’%Y%m%d’)) 显示 -2
- select date_diff(‘year’,cast(列名1 as date),cast (列名2 as date))
- 取月初,年初
date_trunc('month',时间)
date_trunc('year',时间)
例:
- select date_trunc(‘month’,current_date) 显示2021-08-01
- select date_trunc(‘year’,current_date) 显示2021-01-01
- 转类型
# date转为varchar
select to_char(CURRENT_DATE,'yyyy-mm-dd')--2021-10-12 VARCHAR
date转为varchar
select date_format(current_date -interval '1' day,'%Y-%m-%d %T')--2021-10-12 00:00:00 VARCHAR
# varchar转为date
select to_DATE('2021-10-12','yyyy-mm-dd')--2021-10-12 DATE
varchar转为TIMESTAMP
select to_TIMESTAMP('2021-10-12 10:00:00.000000','yyyy-mm-dd hh24:mi:ss.ssssss')--2021-10-12 10:00:00
select date_parse('2021-10-12','%Y-%m-%d')--2021-10-12 00:00:00
select date_parse('20211012','%Y%m%d')--2021-10-12 00:00:00
12.不规范的日期格式处理
日期转换的时候可以在最外层套一个函数try(),对于不规范的日期格式会置空,比如
select try(year(date_parse(BIRTHDAY,'%Y-%m-%d'))) as BIRTHDAY