好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Hive常用日期格式转换语法

获取当前时间

获取当前时间戳

?

1

select unix_timestamp()

把时间戳转为正常的日期

?

1

2

select from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss' )

select from_unixtime(unix_timestamp(), 'yyyy-MM-dd' )

业务中有时存放的是包含毫秒的整数,需要先转换为秒

?

1

select from_unixtime( cast (create_time/1000 as bigint ), 'yyyyMMdd' ) as dt

返回当天三种方式

?

1

2

3

4

5

6

7

SELECT CURRENT_DATE ;   --2017-06-15

select current_date ();   -- 2021-10-22

 

SELECT current_timestamp ; --返回时分秒

--2018-06-18 10:37:53.278

SELECT from_unixtime(unix_timestamp());

--2017-06-15 19:55:04

日期格式转换

日期格式转换 yyyyMMdd—>yyyy-MM-dd

?

1

2

select from_unixtime(unix_timestamp( '20211022' , 'yyyyMMdd' ), "yyyy-MM-dd" );

2021-10-22

固定日期转换成时间戳

?

1

2

3

select unix_timestamp( '2016-08-16' , 'yyyy-MM-dd' ) --1471276800

select unix_timestamp( '20160816' , 'yyyyMMdd' ) --1471276800

select unix_timestamp( '2016-08-16T10:02:41Z' , "yyyy-MM-dd'T'HH:mm:ss'Z'" ) --1471312961

?

1

2

16/Mar/2017:12:25:01 +0800 转成正常格式(yyyy-MM-dd hh:mm:ss)

select from_unixtime(to_unix_timestamp( '16/Mar/2017:12:25:01 +0800' , 'dd/MMM/yyy:HH:mm:ss Z' ))

时间戳转换程固定日期

?

1

2

3

4

5

select from_unixtime(1471276800, 'yyyy-MM-dd' ) --2016-08-16

select from_unixtime(1471276800, 'yyyyMMdd' ) --20160816

select from_unixtime(1471312961) --    2016-08-16 10:02:41

select from_unixtime( unix_timestamp( '20160816' , 'yyyyMMdd' ), 'yyyy-MM-dd' )  --2016-08-16

select date_format( '2016-08-16' , 'yyyyMMdd' ) --20160816

字符串强制转换,获取日期

?

1

2

select to_date( '2016-08-16 10:03:01' ) --2016-08-16

类似sql 中的 date

截取日期部分

?

1

2

3

4

5

select substr( '2021-10-22 17:34:56' ,1,10)

2021-10-22

 

select date_format( '2021-10-22 17:34:56' , 'yyyy-MM-dd' )

2021-10-22

返回日期中的年,月,日,时,分,秒,当前的周数

返回日期中的年

?

1

select year ( '2016-08-16 10:03:01' ) --2016

返回日期中的月

?

1

select month ( '2016-08-16 10:03:01' ) --8

返回日期中的日

?

1

select day ( '2016-08-16 10:03:01' ) --16

返回日期中的时

?

1

select hour ( '2016-08-16 10:03:01' ) --10

返回日期中的分

?

1

select minute ( '2016-08-16 10:03:01' ) --3

返回日期中的秒

?

1

select second ( '2016-08-16 10:03:01' ) --1

返回日期在当前的周数

?

1

select weekofyear( '2016-08-16 10:03:01' ) --33

计算日期差值

返回结束日期减去开始日期的天数

?

1

select datediff( '2016-08-16' , '2016-08-11' )

返回开始日期startdate增加days天后的日期

?

1

select date_add( '2016-08-16' ,10)

返回开始日期startdate减少days天后的日期

?

1

2

3

4

5

6

7

8

9

select date_sub( '2016-08-16' ,10)

 

前一日/昨日

select date_sub( current_date (),1);

2021-10-21

 

最近一个月/30天

select date_sub( current_date (),30);

2021-09-22

前一日12点/昨日12点

?

1

2

select concat(date_format(date_sub( current_date (),1), 'yyyy-MM-dd' ), ' ' , '12' );

2021-10-21 12

返回当月或当年的第一天

返回当月的第一天

?

1

2

3

4

select trunc( '2016-08-16' , 'MM' ) --2016-08-01

 

select date_format(to_date(trunc( current_date (), 'MM' )), "yyyy-MM-dd" );

2021-10-01

返回当年的第一天

?

1

select trunc( '2016-08-16' , 'YEAR' ) --2016-01-01

参考汇总

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

固定日期转换成时间戳

select unix_timestamp( '2016-08-16' , 'yyyy-MM-dd' ) --1471276800

select unix_timestamp( '20160816' , 'yyyyMMdd' ) --1471276800

select unix_timestamp( '2016-08-16T10:02:41Z' , "yyyy-MM-dd'T'HH:mm:ss'Z'" ) --1471312961

16/Mar/2017:12:25:01 +0800 转成正常格式(yyyy-MM-dd hh:mm:ss)

select from_unixtime(to_unix_timestamp( '16/Mar/2017:12:25:01 +0800' , 'dd/MMM/yyy:HH:mm:ss Z' ))

时间戳转换程固定日期

select from_unixtime(1471276800, 'yyyy-MM-dd' ) --2016-08-16

select from_unixtime(1471276800, 'yyyyMMdd' ) --20160816

select from_unixtime(1471312961) --    2016-08-16 10:02:41

select from_unixtime( unix_timestamp( '20160816' , 'yyyyMMdd' ), 'yyyy-MM-dd' )  --2016-08-16

select date_format( '2016-08-16' , 'yyyyMMdd' ) --20160816

返回日期时间字段中的日期部分

select to_date( '2016-08-16 10:03:01' ) --2016-08-16

类似sql 中的 date

取当前时间

select from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss' )

select from_unixtime(unix_timestamp(), 'yyyy-MM-dd' )

返回日期中的年

select year ( '2016-08-16 10:03:01' ) --2016

返回日期中的月

select month ( '2016-08-16 10:03:01' ) --8

返回日期中的日

select day ( '2016-08-16 10:03:01' ) --16

返回日期中的时

select hour ( '2016-08-16 10:03:01' ) --10

返回日期中的分

select minute ( '2016-08-16 10:03:01' ) --3

返回日期中的秒

select second ( '2016-08-16 10:03:01' ) --1

返回日期在当前的周数

select weekofyear( '2016-08-16 10:03:01' ) --33

返回结束日期减去开始日期的天数

select datediff( '2016-08-16' , '2016-08-11' )

返回开始日期startdate增加days天后的日期

select date_add( '2016-08-16' ,10)

返回开始日期startdate减少days天后的日期

select date_sub( '2016-08-16' ,10)

返回当天三种方式

SELECT CURRENT_DATE ;

--2017-06-15

SELECT CURRENT_TIMESTAMP ; --返回时分秒

--2017-06-15 19:54:44

SELECT from_unixtime(unix_timestamp());

--2017-06-15 19:55:04

返回当前时间戳

Select current_timestamp --2018-06-18 10:37:53.278

返回当月的第一天

select trunc( '2016-08-16' , 'MM' ) --2016-08-01

返回当年的第一天

select trunc( '2016-08-16' , 'YEAR' ) --2016-01-01

 参考链接:

Hive日期格式转换方法总结

以上就是Hive常用日期格式转换语法的详细内容,更多关于Hive日期格式转换的资料请关注服务器之家其它相关文章!

原文链接:https://cloud.tencent.com/developer/article/2013699

查看更多关于Hive常用日期格式转换语法的详细内容...

  阅读:42次