impala的时间函数

6.5、获取时间函数

-- 	返回客户端所在时区的当前时间
select CURRENT_TIMESTAMP() ;  -- 返回详细时间,类型timestamp:2021-02-04 08:46:27

-- 返回客户端所在时区的当前时间
select now(); -- 返回详细时间,类型timestamp:2021-02-04 08:46:27

-- 根据本地系统的时间(包括任何时区指定)返回当前日期时间的 字符串形式。
select timeofday(); -- 类型:字符串, Thu Feb 04 08:46:27 2021 CST 

-- 返回客户端时间对应UTC时区的当前时间
select utc_timestamp();  -- 类型timestamp:2021-02-04 08:46:27
6.5.1、时间格式转换
-- 把时间转换成时间搓 返回所在时区时间的整数形式
select unix_timestamp(now()) -- 类型:bigint	1612399587

-- 把秒数转成时间 
-- 把时间戳秒数转化为本地地区中的字符串(按pattern格式化)
from_unixtime(bigint unixtime[,string pattern]-- string
select from_unixtime(cast(cast(1000.0 as decimal) as bigint)); -- 1970-01-01 00:16:40
select from_unixtime(1000,'yyyy-MM-dd'); -- 1970-01-01

-- 把字符串转换成时间
cast('2019-10-14 18:00:41' as timestamp) -- 2019-10-14 18:00:41

-- 返回timestamp对应的date
to_date(timestamp date)	 -- string	2019-10-24

-- 返回字符串对应的timestamp值
to_timestamp(bigint unixtime)  -- -- timestamp  1970-01-15 00:45:34.000
to_timestamp("string date"'yyyy-MM-dd')	-- timestamp  2020-01-01

-- 字符串/时间 转化成时间戳Unix
unix_timestamp(timestamp datetime) -- bigint
unix_timestamp(string datetime,string pattern) -- bigint 结果:1612399587
              
-- 把timestamp、date 按照pattern进行格式化
from_timestamp(now(),'yyyy/MM') -- string
from_timestamp('2021-02-04','yyyy/MM') -- 结果:2021/02
6.5.2、时间计算函数
-- years 增减指定年数
years_add(date/timestamp,int) -- 输出为timestamp/date
years_sub(date/timestamp,int)
-- months 增减指定月份 
months_add(timestamp/date, int/bigint) -- 输出为timestamp/date
months_sub(timestamp/date, int/bigint)
-- weeks 增减指定周数
weeks_add(timestamp/date, int/bigint) -- 输出为timestamp/date
weeks_sub(timestamp/date, int/bigint)
-- days 增减指定天数 
days_add(timestamp/startdate, int/bigint) -- 输出为timestamp/date
days_sub(timestamp/startdate, int/bigint)

-- date 增减指定参数数
date_add(now(),interval 2 months) -- 输出为timestamp/date
date_sub(timestamp/startdate, interval_expression)
-- ④interval_expression的表述可用如下:YEAR[S],MONTH[S] ,WEEK[S] ,DAY[S], HOUR[S], MINUTE[S] ,SECOND[S] ,MILLISECOND[S] ,MICROSECOND[S], NANOSECOND[S] 【表述不区分大小写】
6.5.3、获取指定单位时间函数
-- year() 获取年
year(timestamp/date date)  -- 输出类型 int
-- 获取季节 1,2,3,4
quarter(timestamp/date)
-- 获取月份
month(timestamp/date) -- 1-12
monthname(timestamp/date) -- string 名称
-- 获取周
week(timestamp/date) -- int	获取周(1-53)
weekofyear(timestamp/date)	-- int	获取周(1-53)
-- 获取天
day(timestamp/date)	-- int	获取天(本月第多少天)
dayofmonth(timestamp/date) -- int 本月第多少天
dayofweek(timestamp/date)	-- int 本周第几天 1-7
dayname(timestamp/date)	 -- string	获取天(星期几)
next_day(timestamp/date,'weekday') -- timestamp/date(返回下一个指定星期几的日期)
last_day(timestamp/date)	-- timestamp/date(本月的最后一天日期)
dayofyear(timestamp/date)	-- int	本年第多少天)

-- 获取时分秒
hour(timestamp date)	-- int	获取小时
minute(timestamp date)	-- int	获取分钟
second(timestamp date)	-- int	获取秒

-- 获取指定单位的时间
extract(timestamp/date,'Strin') -- bigint	获取参数指定的时间单位
-- extract 的时间单位可以使用如下:YEAR,QUARTER,MONTH,DAY,HOUR,MINUTE,SECOND,MILLISECOND,EPOCH(转成数字类型)

-- 获取参数指定的时间单位
date_part('string'timestamp)	-- bigint	
-- date_part和extract支持的时间单位一致;对于小时,分秒这些都是不知道date类型操作的(因为date只到天)

-- 获取截断为指定单位的时间
date_trunc('string'timestamp/date)
date_trunc('year',now())
-- ③date_trunc的时间单位可以使用如下:MILLENNIUM(千年),CENTURY(百年),DECADE(十年),
--YEAR,MONTH,WEEK,DAY,HOUR, MINUTE,SECOND,MILLISECONDS(毫秒),MICROSECONDS(微妙)
--【单位不区分大小写】

trunc(timestamp/ date,'String')
trunc(now(),'year') 
/*  String	截取说明
SYYYY,YYYY,YEAR,SYEAR,YYY,YY,Y	年
Q	季节
MONTH,MON,MM,RM	月
WW	最近的日期是与一年中的第一天相同的日期
W	最近的日期是与该月的第一天相同的星期几
DDD,DD,J	天
DAY,DY,D	星期几(星期一)的开始
HH,HH12,HH24	小时
MI	分钟 */
6.5.4、时间比较函数
-- 返回endDate比startDate多多少天
datediff('2020-07-31', '2020-07-30') -- int 结果:1

-- 返回两个日期相差的整数月份个数
int_months_between('2020-03-31', '2020-01-20')    -- int 结果:2

-- 返回浮点数的月数相差的数
months_between('2020-02-28','2020-03-01') -- double	结果: -0.12903225806451613

-- 比较日期是否相等,返回-1,0,1,null四种数值
date_cmp(DATE date1, DATE date2)	-- int	结果:1
-- 比较时间戳是否相等,返回-1,0,1,null四种数值
timestamp_cmp(timestamp t1,timestamp t2)	-- int 结果:1
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值