HiveSQL的⼏个时间函数
datediff计算时间差
命令格式:
datediff(datetime1, datetime2, datepart)
⽤途:
计算两个时间的差值,并转换成指定的单位,如:秒。
参数说明:
● datetime1 , datetime2: datetime类型,被减数和减数,若输⼊为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
● datepart: string类型常量,修改单位,yyyy、mm、dd、hh、mi、ss中的⼀个,指定时间差值的单位,也⽀持扩展的⽇期格式,
年-“year”, ⽉-“month”或”mon”, ⽇-“day”, ⼩时-“hour”。。若datepart不符合指定的⼏种pattern或者其它类
型则会发⽣异常。
返回值:
返回时间差值,int类型。任⼀输⼊参数是NULL,返回NULL。
备注:
计算时会按照datepart切掉低单位部分,然后再计算结果。
⽰例:
若start = ‘2005-12-31 23:59:59’, end = ‘2006-01-01 00:00:00’:
datediff(end, start, ‘dd’) = 1
datediff(end, start, ‘mm’) = 1
datediff(end, start, ‘yyyy’) = 1
datediff(end, start, ‘hh’) = 1
datediff(end, start, ‘mi’) = 1
datediff(end, start, ‘ss’) = 1
创建⼀个测试数据
CREATE TABLE IF NOT EXISTS time_test(
id  INT
,create_time STRING
,update_time STRING
)
COMMENT'time_test';
INSERT INTO time_test
VALUES(1,'2020-05-25','2020-05-25 12:00:00'),
(2,'2020-05-25','2020-05-26 10:00:00'),
(3,'2020-05-26','2020-05-26 12:30:00'),
(4,'2020-05-26','2020-05-26 14:00:00'),
(5,'2020-05-27','2020-05-27 08:00:00'),
(6,'2020-05-27','2020-05-27 15:00:00');
其实按照正常逻辑来计算时间差⽐如计算updatetime与今天的时间差天
需要如下代码
--GETDATE获取当前时间,unix_timestamp将字符串格式转化为时间戳,from_unixtime将时间戳转化为时间格式
SELECT id,DATEDIFF(GETDATE(),from_unixtime(unix_timestamp(update_time)),'dd')as diff FROM time_test;
但是前⾯⽂档⾥⾯我们标红的地⽅可以看到若输⼊为string类型会隐式转换为datetime类型后参与运算,
也就是DATEDIFF函数其实会⾃动转换,所以代码其实可以直接写成
SELECT id,DATEDIFF(GETDATE(),update_time,'dd')as diff FROM time_test;
结果如下:
id diff
12
id diff
21
31
41
50
60
SELECT GETDATE() AS t;–2020-05-27 17:43:00当前时间【5⽉27⽇】
同时可以根据时间差来进⾏条件的筛选
SELECT*FROM time_test WHERE DATEDIFF(GETDATE(),update_time,'dd')=1;
id create_time update_time
unix时间戳转换日期格式22020-05-252020-05-26 10:00:00
32020-05-262020-05-26 12:30:00
42020-05-262020-05-26 14:00:00
GETDATE获取当前时间以及之前时间
getdate
命令格式:
getdate()
⽤途:
获取当前系统时间
返回值:
返回当前⽇期和时间,datetime类型
dateadd
命令格式:
dateadd(datetime, delta, datepart)
⽤途:
按照指定的单位和幅度修改datetime的值
参数说明:
● datetime:datetime类型,⽇期值。若输⼊为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。。
● delta:bigint类型,修改幅度。若输⼊为string类型或double型会隐式转换到biging类型后参与运算,其他类型会引发异常。若delta
⼤于0,加;否则减。
● datepart: string类型常量, 修改单位,,⽀持格式对天的修改 “dd” , 对⽉的修改 “mm”,对年的修改 “yyyy” ,对⼩时修
改"hh",对分钟修改"mi",对秒修改"ss" ,此外也⽀持扩展的⽇期格式, 年-“year”, ⽉-“month”或”mon”, ⽇-“day”, ⼩时-“hour”。 ⾮常量、不⽀持的格式会或其它类型抛异常。
lastday
命令格式:
lastday(datetime)
⽤途:
取⼀个⽉的最后⼀天, 截取到天,时分秒部分为00:00:00。
参数说明:
● datetime: datetime格式的⽇期值,若输⼊为string类型会隐式转换为datetime类型后参与运算, 其它类型报异常。
SELECT GETDATE()AS t;--当前时间【5⽉27】
SELECT  dateadd(GETDATE(),-1,'mm')as t;--当前时间减去⼀个⽉【4⽉27】
SELECT LASTDAY(dateadd(GETDATE(),-1,'mm'))as t;--上个⽉的最后⼀天【4⽉30】SELECT dateadd(LASTDAY(dateadd(GETDATE(),-2,'mm')),1,'dd')as t;--上个⽉的第⼀天【4⽉1】

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。