//获取当前时间
select now(); //时间到毫秒,如:2022-07-21 13:57:14.435929000
select current_timestamp(); //与now()结果一样
select from_unixtime(unix_timestamp(),'yyyy-MM-dd') //如:2022-07-22
select to_date(now()) //如:2022-07-22
select from_unixtime(unix_timestamp()) //如:2022-07-22 09:59:34
select from_unixtime(unix_timestamp(),'yyyy/MM/dd HH:mm:ss') //获取当前时间(格式为:年/月/日 时:分:秒)
select left (cast(now() as string),19) //2022-07-22 10:01:38
select left (cast(now() as string),16) //2022-07-22 10:01
select from_unixtime(unix_timestamp(a.字段名),'yyyy') as year,* from 表名 a //转换某个字段的时间格式
**时间戳提取**
select date_part('year', now()) //2022
select extract(now(), 'year')//2022
select extract(year from now())//2022
select year('2022-07-27') //2022
select month('2022-07-27') //7
select date_trunc('year',now()) //结果:2022-01-01 00:00:00
select date_trunc('year','2022-07-07 14:35:11') //2022-01-01 00:00:00
select date_trunc('year',a.字段名) as year,* from 表名 //2022-01-01 00:00:00
格式如下:
格式 | 中文含义 | 备注 |
---|---|---|
microseconds | 微秒 | 当前时间所在微秒 |
milliseconds | 毫秒 | 当前时间所在毫秒 |
second | 秒 | 当前时间所在秒 |
minute | 分钟 | 当前时间所在分钟 |
hour | 小时 | 当前时间所在小时 |
day | 日 | 当前时间所在天的第1天00点 |
week | 周 | 当前时间所在周的第1天00点 |
month | 月 | 当前时间所在月份第1天00点 |
year | 年 | 当前时间所在年份第1天00点 |
decade | 十年 | |
century | 世纪 | |
millennium | 一千年 |
//获取当前时间半年前的时间
select add_months(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-6) //2022-01-28 00:00:00
//当前时间减30天
select from_unixtime(unix_timestamp()-60*60*24*30) // 2022-06-28 15:49:55
//当前时间减1天
select adddate(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'),-1) //2022-07-27 15:54:48
days_add(timestamp startdate,int days)
如:
select days_add('2022-07-25',1) //2022-07-26 00:00:00
select days_add(from_unixtime(unix_timestamp()),2)//2022-07-31 10:17:19
select days_add(now(),2)//2022-07-31 10:17:27.241333000
days_sub(timestamp startdate,int days)
如:
select days_sub(now(),2) //2022-07-27 10:22:10.202118000
select days_sub(from_unixtime(unix_timestamp()),2) //2022-07-27 10:21:35
格式如下:
格式 | 中文含义 |
---|---|
years_add | 增加年 |
years_sub | 减少年 |
months_add | 增加月 |
months_sub | 减少月 |
days_add | 增加天 |
days_sub | 减少天 |
weeks_add | 增加周 |
weeks_sub | 减少周 |
hours_add | 增加小时 |
hours_sub | 减少小时 |
minutes_add | 增加分钟 |
minutes_sub | 减少分钟 |
senconds_add | 增加秒 |
senconds_add | 减少秒 |
注:也可以用公共日期函数
date_add(timestamp startdate, interval_expression)
date_sub(timestamp startdate, int days)
如:
select date_add(from_unixtime(unix_timestamp()),2) //2022-07-31 10:57:06
select date_sub(from_unixtime(unix_timestamp()),2) //2022-07-27 10:57:13
把时间转化成时间戳
select cast('1966-07-30' as timestamp); //1966-07-30 00:00:00
select cast('1985-09-25 17:45:30.005' as timestamp);
select cast('08:30:00' as timestamp);
把字符串转换成时间戳
cast('2019-10-14 18:00:41' as timestamp)
impala 没有好用的 timestamp_diff() 函数, 比如我们想要知道两个时间相差多少个小时, 不能直接求出, 下面是一个简单的步骤:
1. 先算出一个小时对应的秒数是多少
2. 将两个时间都转成秒数, 然后做差, 然后除以一个小时的秒数.
3. unix_timestamp(finish_time)-unix_timestamp(start_time)可以得出之间的秒数
//计算两个时间间隔小时数
select ( unix_timestamp('2022-07-29 14:40:00')-unix_timestamp('2022-07-29 13:40:00'))/60/60