impala时间函数最全版(强烈建议收藏)

本文基于impala3.2版本,所有的内置时间函数;

文章目录

  • impala时间函数最全版(强烈建议收藏)
    • 一、补充概念说明
      • 1、date类型和timestamp类型区别
      • 2、时区
    • 二、获取当前时间戳函数
    • 三、时间计算函数
    • 四、获取时间指定单位函数
    • 五、时间比较函数
    • 六、时间格式转换函数

一、补充概念说明

1、date类型和timestamp类型区别

对于一个完整的时间格式来说:2021-02-02 09:59:42.46,前半部分属于date,后半部分属于time;date类型的字段只支持前半部分

timestamp可用来表示完整格式的时间,时间存储:插入时间(当前时区)->UTC(世界标准时间)->输出时间(客户端当前时区)

2、时区

地球上不同的区域使用同一时间标准的定义;常见的世界标准时间(UTC),北京时间(UTC+8);

时区的表示,比如:Asia/Shanghai,America/New_York

3、本文中的使用示例都是 select (使用示例) from table 的形式,这里进行了简写;

二、获取当前时间戳函数

序号 语法类型/方法名称 输出类型 使用说明
1 current_timestamp() timestamp 返回客户端所在时区的当前时间戳
2 now() timestamp 返回客户端所在时区的当前时间戳
3 unix_timestamp() bigint 返回客户端所在时区的当前时间戳的整数形式
4 utc_timestamp() timestamp 返回客户端时间对应UTC时区的当前时间戳
5 timeofday() string 根据本地系统的时间(包括任何时区指定)返回当前日期
和时间的字符串表示形式。

示例如下:执行时间北京时间:2021-02-04 08:46:27

--使用示例                       |        对应输出                            |       对应函数序号
current_timestamp()                     2021-02-04 08:46:27                        1
now()                                   2021-02-04 08:46:27                        2
unix_timestamp()                        1612399587                                 3
timeofday()                             Thu Feb 04 08:46:27 2021 CST               4
utc_timestamp()                         2021-02-04 00:46:27                        5

三、时间计算函数

序号 语法类型/方法名称 输出类型 使用说明
1 years_add(timestamp/date date, int/bigint years) timestamp/date 增加指定年数
2 years_sub(timestamp/date date, int/bigint years) timestamp/date 减少指定年数
3 months_add(timestamp/date date, int/bigint months) timestamp/date 增加指定月数
4 months_sub(timestamp/date date, int/bigint months) timestamp/date 减少指定月数
5 add_months(timestamp/date date, int/bigint months) timestamp/date 增加指定月数
6 weeks_add(timestamp/date date, int/bigint weeks) timestamp/date 增加指定周数
7 weeks_sub(timestamp/date date, int/bigint weeks) timestamp/date 减少指定周数
8 days_add(timestamp/date startdate, int/bigint days) timestamp/date 增加指定天数
9 days_sub(timestamp/date startdate, int/bigint days) timestamp/date 减少指定天数
10 date_add(timestamp/date startdate, int/bigint days) timestamp/date 增加指定天数
11 date_sub(timestamp/date startdate, int/bigint days) timestamp/date 减少指定天数
12 adddate(timestamp/date startdate, int/int days) timestamp/date 增加指定天数
13 subdate(timestamp/date startdate,bigint/int days) timestamp/date 减少指定天数
14 hours_add(timestamp date, int/bigint hours) timestamp 增加指定小时
15 hours_sub(timestamp date, int/bigint hours) timestamp 减少指定小时
16 minutes_add(timestamp date, int/bigint minutes) timestamp 增加指定分钟
17 minutes_sub(timestamp date, int/bigint minutes) timestamp 减少指定分钟
18 seconds_add(timestamp date, int/bigint seconds) timestamp 增加指定秒数
19 seconds_sub(timestamp date, int/bigint seconds) timestamp 减少指定秒数
20 milliseconds_add(timestamp date, int/bigint milliseconds) timestamp 增加指定毫秒数
21 milliseconds_sub(timestamp date, int/bigint milliseconds) timestamp 减少指定毫秒数
22 microseconds_add(timestamp date, int/bigint microseconds) timestamp 增加指定微秒数
23 microseconds_sub(timestamp date, int/bigint microseconds) timestamp 减少指定微秒数
24 nanoseconds_add(timestamp date, int/bigint nanoseconds) timestamp 增加指定纳秒数
25 nanoseconds_sub(timestamp date, int/bigint nanoseconds) timestamp 减少指定纳秒数
26 date_add(timestamp/date startdate, interval_expression) timestamp/date 使用第二个参数计算日期增量值(增加)
27 date_sub(timestamp/date startdate, interval_expression) timestamp/date 使用第二个参数计算日期增量值(减少)

补充说明: ①为了方便表达,下面参数都是用timestamp,执行时间北京时间:2021-02-04 08:46:27.707274000;

​ ②年月周日这些函数都是可以用timestamp和date类型,输入是什么类型输出就是什么类型;(比如输入date,输出也是date)

​ ③1秒=1000毫秒=1000000微妙=1000000000纳秒(分别是3,6,9次方)

​ ④interval_expression的表述可用如下:YEAR[S],MONTH[S] ,WEEK[S] ,DAY[S], HOUR[S], MINUTE[S] ,SECOND[S] ,MILLISECOND[S] ,MICROSECOND[S], NANOSECOND[S] 【表述不区分大小写】

示例如下:

--使用示例                       |        对应输出                            |           对应函数序号
years_add(now(),1)                      2022-02-04 08:46:27                            1
years_sub(now(),1)                      2020-02-04 08:46:27                            2
months_add(now(),1)                     2021-03-04 08:46:27                            3
months_sub(now(),1)                     2021-01-04 08:46:27                            4
add_months(now(),1)                     2021-03-04 08:46:27                            5
weeks_add(now(), 1)                     2021-02-11 08:46:27                            6
weeks_sub(now(), 1)                     2021-01-28 08:46:27                            7
days_add(now(),1)                       2021-02-05 08:46:27                            8
days_sub(now(), 1)                      2021-02-03 08:46:27                            9
date_add(now(), 1)                      2021-02-05 08:46:27                            10
date_sub(now(), 1)                      2021-02-03 08:46:27                            11
adddate(now(),1)                        2021-02-05 08:46:27                            12
subdate(now(),1)                        2021-02-03 08:46:27                            13
hours_add(now(),1)                      2021-02-03 09:46:27                            14
hours_sub(now(),1)                      2021-02-03 07:46:27                            15
minutes_add(now(),1)                    2021-02-03 08:47:27                            16
minutes_sub(now(),1)                    2021-02-03 08:45:27                            17
seconds_add(now(),1)                    2021-02-04 08:46:28                            18
seconds_sub(now(),1)                    2021-02-04 08:46:26                            19
milliseconds_add(now(),1000)            2021-02-04 08:46:28.707274000                  20
milliseconds_sub(now(),1000)            2021-02-04 08:46:26.707274000                  21
microseconds_add(now(),1000)            2021-02-04 08:46:27.708274000                  22
microseconds_sub(now(),1000)            2021-02-04 08:46:27.706274000                  23
nanoseconds_add(now(),1000)             2021-02-04 08:46:27.707275000                  24
nanoseconds_sub(now(),1000)             2021-02-04 08:46:27.707273000                  25
date_add(now(),interval 2 months)       2021-04-04 08:46:27                            26
date_sub(now(),interval 2 hours)        2021-02-04 06:46:27                            27

四、获取时间指定单位函数

序号 语法类型/方法名称 输出类型 使用说明
1 year(timestamp/date date) int 获取年
2 quarter(timestamp/date date) int 获取季节(1,2,3,4)
3 month(timestamp/date date) int 获取月
4 monthname(timestamp/date date) string 获取月份名称
5 week(timestamp/date date) int 获取周(1-53)
6 weekofyear(timestamp/date date) int 获取周(1-53)
7 dayofweek(timestamp/date date) int 获取天(本周第多少天,周日算第一天)
8 dayname(timestamp/datedate) string 获取天(星期几)
9 next_day(timestamp/date date,String weekday) timestamp/date 获取天(返回下一个指定星期几的日期)
10 day(timestamp/date date) int 获取天(本月第多少天)
11 dayofmonth(timestamp/date date) int 获取天(本月第多少天)
12 last_day(timestamp/date date) timestamp/date 获取天(本月的最后一天日期)
13 dayofyear(timestamp/date date) int 获取天(本年第多少天)
14 hour(timestamp date) int 获取小时
15 minute(timestamp date) int 获取分钟
16 second(timestamp date) int 获取秒
17 millisecond (timestamp date) int 获取毫秒
18 extract(timestamp/date date,String unit) bigint 获取参数指定的时间单位
19 extract(unit from timestamp/date date) bigint 获取参数指定的时间单位
20 date_part(string unit,timestamp timestamp) bigint 获取参数指定的时间单位
21 trunc(timestamp/date date,String unit) timestamp/date 获取截断为指定单位的时间
22 date_trunc(string unit,timestamp/date date) timestamp/date 获取截断为指定单位的时间

**补充说明:**①extract 的时间单位可以使用如下:YEAR,QUARTER,MONTH,DAY,HOUR,MINUTE,SECOND,MILLISECOND,EPOCH(转成数字类型)【单位不区分大小写】

​ ②date_part和extract支持的时间单位一致;对于小时,分秒这些都是不知道date类型操作的(因为date只到天)

​ ③date_trunc的时间单位可以使用如下:MILLENNIUM(千年),CENTURY(百年),DECADE(十年),YEAR,MONTH,WEEK,DAY,HOUR, MINUTE,SECOND,MILLISECONDS(毫秒),MICROSECONDS(微妙)【单位不区分大小写】

​ ④trunc的时间单位可以使用如下:

unit 截取说明
SYYYY,YYYY,YEAR,SYEAR,YYY,YY,Y
Q 季节
MONTH,MON,MM,RM
WW 最近的日期是与一年中的第一天相同的日期
W 最近的日期是与该月的第一天相同的星期几
DDD,DD,J
DAY,DY,D 星期几(星期一)的开始
HH,HH12,HH24 小时
MI 分钟

示例如下:执行时间北京时间:2021-02-04 08:46:27.707274000;(星期四)

--使用示例                    |      对应输出                       |    对应函数序号
year(now())                         2021                              1
quarter(now())                      1                                 2
month(now())                        2                                 3
monthname(now())                    February                          4
week(now())                         5                                 5
weekofyear(now())                   5                                 6
dayofweek(now())                    5                                 7
dayname(now())                      Thursday                          8
next_day(now(),'monday')            2021-02-08 08:46:27               9
day(now())                          4                                 10
dayofmonth(now())                   4                                 11
last_day(now())                     2021-02-28 00:00:00               12
dayofyear(now())                    35                                13
hour(now())                         8                                 14
minute(now())                       46                                15
second(now())                       27                                16
millisecond (now())                 707                               17
extract(now(),'year')               2021                              18
extract(year from now())            2021                              19
trunc(now(),'year')                 2021-01-01 00:00:00               20
date_trunc('year',now())            2021-01-01 00:00:00               21

五、时间比较函数

序号 语法类型/方法名称 输出类型 使用说明
1 datediff(timestamp/date enddate, timestamp/date startdate) int 返回endDate比startDate多多少天
2 int_months_between(timestamp/date enddate, timestamp/date startdate) int 返回两个日期相差的整数月份个数
3 months_between(timestamp/date enddate, timestamp/date startdate) double 返回浮点数的月数相差的数
4 date_cmp(DATE date1, DATE date2) int 比较日期是否相等,返回-1,0,1,null四种数值
5 timestamp_cmp(timestamp t1,timestamp t2) int 比较时间戳是否相等,返回-1,0,1,null四种数值

**补充说明:**①计算天数和月份相差的值,都是省略掉time的部分,只比较date的部分;(比如23:59:00和 00:02:00也是差一天)

示例如下:执行时间北京时间:2021-02-04 08:46:27.707274000;(星期四)

--使用示例                                |         对应输出                  |      对应函数序号
datediff('2020-07-31', '2020-07-30')              1                               1
int_months_between('2020-03-31', '2020-01-20')    2                               2
months_between('2020-02-28','2020-03-01')         -0.12903225806451613            3
date_cmp('2021-01-01','2020-12-01')               1                               4
timestamp_cmp('2021-01-01','2020-12-01')          1                               5

六、时间格式转换函数

序号 语法类型/方法名称 输出类型 使用说明
1 to_date(timestamp date) string 返回时间戳对应的date
2 to_timestamp(bigint unixtime) timestamp 返回整数对应的timestamp值
3 to_timestamp(string date,string pattern) timestamp 返回字符串对应的timestamp值
4 to_utc_timestamp(timestamp date1,string timezone) timestamp 把指定时区的指定时间戳转化为UTC时区的时间戳
5 from_timestamp(timestamp date,string pattern) string 把timestamp按照pattern进行格式化
6 from_timestamp(string date,string pattern) string 把date按照pattern进行格式化
7 from_unixtime(bigint unixtime) string 把时间戳秒数转化为本地地区中的字符串
8 from_unixtime(bigint unixtime,string pattern) string 把时间戳秒数转化为本地地区中的字符串(按pattern格式化)
9 from_utc_timestamp(timestamp date,string timezone) timestamp 把UTC时区的指定时间戳转化为指定时区的时间戳
10 unix_timestamp(string datetime) bigint 把string类型的date或日期转化成时间戳Unix
11 unix_timestamp(timestamp datetime) bigint 把string类型的timestamp转化成时间戳Unix
12 unix_timestamp(string datetime,string pattern) bigint 把string类型的时间按pattern进行时间偏移对应转化成时间戳Unix

**补充说明:**①模式字符串使用说明:

模式 描述
y
M
d
H 小时
m 分钟
s
S 小数秒
+/-hh:mm 时区偏移
+/-hhmm 时区偏移
+/-hh 时区偏移

示例如下:执行时间北京时间:2021-02-04 08:46:27.707274000;(星期四)

--使用示例                                |        对应输出                       |            对应函数序号
to_date(now())                                    2021-02-04                                1
to_timestamp(1612399587)                          2021-02-04 08:46:27                       2
to_timestamp('2021/02/04','yyyy/MM/dd')           2021-02-04 00:00:00                       3
to_utc_timestamp(now(),'Asia/Shanghai')           2021-02-04 00:46:27                       4
from_timestamp(now(),'yyyy/MM')                   2021/02                                   5
from_timestamp('2021-02-04','yyyy/MM')            2021/02                                   6
from_unixtime(1612399587)                         2021-02-04 08:46:27                       7
from_unixtime(1612399587,'yyyy/MM')               2021/02                                   8
from_utc_timestamp(now(),'Asia/Shanghai')         2021-02-04 16:46:27                       9
unix_timestamp('2021-02-04')                      1612368000                                10
unix_timestamp(now())                             1612399587                                11
unix_timestamp('2021-02-04 08:46:27-01:00',       1612403187 (相当于2021-02-04 09:46:27)    12
               'yyyy-MM-dd HH:mm:ss-hh:mm'
              )
(0)

相关推荐