FROM_UNIXTIME(BIGINT unixtime[, STRING format])
- 定义:
from_unixtime(bigint unixtime[, string format]) - 说明:传入一个精确到秒的时间戳,转为一个日期时间字符串,默认格式为yyyy-MM-dd HH:mm:ss,使用默认的时区(配置为
hive.local.time.zone,这个配置的默认值为LOCAL,就是使用服务器本地的时区) - 返回值类型:string
- 案例
SELECT FROM_UNIXTIME(1672295768);
+----------------------+
| _c0 |
+----------------------+
| 2022-12-29 06:36:08 |
+----------------------+
SELECT FROM_UNIXTIME(1672295768, 'yyyy/MM/dd');
+-------------+
| _c0 |
+-------------+
| 2022/12/29 |
+-------------+
DATE_FORMAT(DATE/TIMESTAMP/STRING ts, STRING fmt)
- 定义:
date_format(date/timestamp/string ts, string fmt) - 说明:传入一个日期时间,转化为指定的格式,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或者“yyyy-MM-dd”
- 返回值类型:string
- 可用版本:hive-1.2.0+
- 案例
SELECT DATE_FORMAT("2022-01-01 00:00:00", "yyyy/MM/dd");
+-------------+
| _c0 |
+-------------+
| 2022/01/01 |
+-------------+
SELECT DATE_FORMAT("2022-01-01", "yyyy.MM.dd");
+-------------+
| _c0 |
+-------------+
| 2022.01.01 |
+-------------+
SELECT DATE_FORMAT("20220101", "yyyy.MM.dd");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
UNIX_TIMESTAMP()
- 定义:
unix_timestamp() - 说明:返回当前时间时间戳,单位是秒,从hive-2.0开始,此函数已经被标为废弃状态,推荐使用常量
CURRENT_TIMESTAMP - 返回值类型:bigint
- 案例
SELECT UNIX_TIMESTAMP();
+-------------+
| _c0 |
+-------------+
| 1672295768 |
+-------------+
SELECT CURRENT_TIMESTAMP;
+--------------------------+
| _c0 |
+--------------------------+
| 2022-12-29 14:37:17.166 |
+--------------------------+
UNIX_TIMESTAMP(STRING date)
- 定义:
unix_timestamp(string date) - 说明:传入一个格式为“yyyy-MM-dd HH:mm:ss”的字符串,转换为精确到秒的时间戳,如果转换失败,返回NULL
- 返回值类型:bigint
- 案例
SELECT UNIX_TIMESTAMP("2023-01-01 00:00:00");
+-------------+
| _c0 |
+-------------+
| 1672531200 |
+-------------+
SELECT UNIX_TIMESTAMP("20230101");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
UNIX_TIMESTAMP(STRING date, STRING pattern)
- 定义:
unix_timestamp(string date, string pattern) - 说明:传入一个日期时间字符串及其格式,转换为精确到秒的时间戳,如果转换失败,返回NULL
- 返回值类型:bigint
- 案例
-- 不给时间,默认为 00:00:00
SELECT UNIX_TIMESTAMP("2023-01-01", "yyyy-MM-dd");
+-------------+
| _c0 |
+-------------+
| 1672531200 |
+-------------+
SELECT UNIX_TIMESTAMP("20230101120000", 'yyyyMMddHHmmss');
+-------------+
| _c0 |
+-------------+
| 1672574400 |
+-------------+
SELECT UNIX_TIMESTAMP("20230101120000", 'yyyy-MM-dd');
+-------+
| _c0 |
+-------+
| NULL |
+-------+
TO_DATE(STRING timestamp)
- 定义:
to_date(string timestamp) - 说明:传入一个日期时间字符串,返回其日期部分,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或者“yyyy-MM-dd”
- 返回值类型:hive-2.1.0之前返回string,2.1.0+返回date
- 案例
SELECT TO_DATE("2023-01-01 12:00:00");
+-------------+
| _c0 |
+-------------+
| 2023-01-01 |
+-------------+
SELECT TO_DATE("2023-01-01");
+-------------+
| _c0 |
+-------------+
| 2023-01-01 |
+-------------+
SELECT TO_DATE("20230101");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
YEAR(STRING date)
- 定义:
year(string date) - 说明:传入一个日期时间字符串,返回其年份部分,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT YEAR("2023-01-01 12:00:00");
+-------+
| _c0 |
+-------+
| 2023 |
+-------+
SELECT YEAR("2023-01-01");
+-------+
| _c0 |
+-------+
| 2023 |
+-------+
SELECT YEAR("20230101");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
QUARTER(DATE/TIMESTAMP/STRING)
- 定义:
quarter(date/timestamp/string) - 说明:传入一个日期时间字符串,返回其季度数字,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT QUARTER("2023-01-01 12:00:00");
+------+
| _c0 |
+------+
| 1 |
+------+
SELECT QUARTER("2023-04-01");
+------+
| _c0 |
+------+
| 2 |
+------+
SELECT QUARTER("20230701");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
MONTH(STRING date)
- 定义:
month(string date) - 说明:传入一个日期时间字符串,返回其月份数字,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT MONTH("2023-01-01 12:00:00");
+------+
| _c0 |
+------+
| 1 |
+------+
SELECT MONTH("2023-04-01");
+------+
| _c0 |
+------+
| 4 |
+------+
SELECT MONTH("20230701");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
DAY(STRING date)
- 定义:
day(string date) - 说明:传入一个日期时间字符串,返回其在月份中的数字(几号),传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT DAY("2023-01-01 12:00:00");
+------+
| _c0 |
+------+
| 1 |
+------+
SELECT DAY("2023-01-11");
+------+
| _c0 |
+------+
| 11 |
+------+
SELECT DAY("20230701");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
DAYOFMONTH(STRING date)
同DAY
HOUR(STRING date)
- 定义:
hour(string date) - 说明:传入一个日期时间字符串,返回其小时数,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT HOUR("2023-01-01 03:00:00");
+------+
| _c0 |
+------+
| 3 |
+------+
SELECT HOUR("2023-01-11");
+------+
| _c0 |
+------+
| 0 |
+------+
SELECT HOUR("18:00:00");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
SELECT HOUR("20230701");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
MINUTE(STRING date)
- 定义:
minute(string date) - 说明:传入一个日期时间字符串,返回其分钟数,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT MINUTE("2023-01-01 03:07:00");
+------+
| _c0 |
+------+
| 7 |
+------+
SELECT MINUTE("2023-01-11");
+------+
| _c0 |
+------+
| 0 |
+------+
SELECT MINUTE("18:37:00");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
SELECT MINUTE("20230701");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
SECOND(STRING date)
- 定义:
second(string date) - 说明:传入一个日期时间字符串,返回其秒数,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT SECOND("2023-01-01 03:07:04");
+------+
| _c0 |
+------+
| 4 |
+------+
SELECT SECOND("2023-01-11");
+------+
| _c0 |
+------+
| 0 |
+------+
SELECT SECOND("18:37:13");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
SELECT SECOND("20230701");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
WEEKOFYEAR(STRING date)
- 定义:
weekofyear(string date) - 说明:传入一个日期时间字符串,返回日期所在的周是当年的第几周,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 规则:每周从周一开始,每年的第一周至少包含4天
- 返回值类型:int
- 案例
SELECT WEEKOFYEAR("2023-01-01 03:07:04");
+------+
| _c0 |
+------+
| 52 |
+------+
SELECT WEEKOFYEAR("2022-01-01");
+------+
| _c0 |
+------+
| 52 |
+------+
SELECT WEEKOFYEAR("2021-01-01");
+------+
| _c0 |
+------+
| 53 |
+------+
SELECT WEEKOFYEAR("2020-01-01");
+------+
| _c0 |
+------+
| 1 |
+------+
SELECT WEEKOFYEAR("20220303");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
DATEDIFF
- 定义:
datediff(string enddate, string startdate) - 说明:计算startdate和enddate之间相差了几天,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:int
- 案例
SELECT DATEDIFF("2023-01-02 03:07:04", "2023-01-01 15:00:00");
+------+
| _c0 |
+------+
| 1 |
+------+
SELECT DATEDIFF("2022-01-03", "2022-01-01");
+------+
| _c0 |
+------+
| 2 |
+------+
SELECT DATEDIFF("20220103", "20220101");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
DATE_ADD(DATE/TIMESTAMP/STRING startdate, TINYINT/SMALLINT/INT days)
- 定义:
date_add(date/timestamp/string startdate, tinyint/smallint/int days) - 说明:返回指定日期增加指定天数后的日期,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:hive-2.1.0之前返回string,2.1.0+返回date
- 案例
SELECT DATE_ADD("2023-01-02 03:07:04", 2);
+-------------+
| _c0 |
+-------------+
| 2023-01-04 |
+-------------+
SELECT DATE_ADD("2022-01-03", 3);
+-------------+
| _c0 |
+-------------+
| 2022-01-06 |
+-------------+
SELECT DATE_ADD("20220103", 3);
+-------+
| _c0 |
+-------+
| NULL |
+-------+
DATE_SUB(DATE/TIMESTAMP/STRING startdate, TINYINT/SMALLINT/INT days)
- 定义:
date_sub(date/timestamp/string startdate, tinyint/smallint/int days) - 说明:返回指定日期减少指定天数后的日期,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:hive-2.1.0之前返回string,2.1.0+返回date
- 案例
SELECT DATE_SUB("2023-01-02 03:07:04", 2);
+-------------+
| _c0 |
+-------------+
| 2022-12-31 |
+-------------+
SELECT DATE_SUB("2022-01-03", 3);
+-------------+
| _c0 |
+-------------+
| 2021-12-31 |
+-------------+
SELECT DATE_SUB("20220103", 3);
+-------+
| _c0 |
+-------+
| NULL |
+-------+
ADD_MONTHS(STRING start_date, INT num_months, STRING output_date_format)
- 定义:
add_months(string start_date, int num_months, string output_date_format) - 说明:返回指定日期增加指定月份后的日期,start_date是传入的日期,支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”,num_months是需要增加的月份数,output_date_format是输出的日期格式,可选,默认为“yyyy-MM-dd”
- 返回值类型:string
- 可用版本:hive-1.1.0+,官网说,可选的输出日期格式在hive-4.0.0+可用,但在hive-3.1.2版本中实测可用
- 案例
SELECT ADD_MONTHS("2023-01-02 03:07:04", 2);
+-------------+
| _c0 |
+-------------+
| 2023-03-02 |
+-------------+
SELECT ADD_MONTHS("2022-01-03", -3);
+-------------+
| _c0 |
+-------------+
| 2021-10-03 |
+-------------+
SELECT ADD_MONTHS("2022-01-03", -3, "yyyy/MM/dd");
+-------------+
| _c0 |
+-------------+
| 2021/10/03 |
+-------------+
SELECT ADD_MONTHS("20220103", 3);
+-------+
| _c0 |
+-------+
| NULL |
+-------+
MONTHS_BETWEEN(DATE/TIMESTAMP/STRING date1, DATE/TIMESTAMP/STRING date2)
- 定义:
months_between(date1, date2) - 说明:返回两个日期之间相差的月份数,如果date1 > date2,则返回正数,否则返回负数;如果两个日期是月份中的同一天,比如都是4号,或者都是最后一天,比如1月31号和4月30号,则结果是整数;否则结果是:先求两个日期之间相差的天数,然后除以31。传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”。
- 返回值类型:小数位数为8的double
- 可用版本:hive-1.2.0+
- 案例
SELECT MONTHS_BETWEEN('2023-01-02 03:07:04', '2023-02-02');
+-------+
| _c0 |
+-------+
| -1.0 |
+-------+
SELECT MONTHS_BETWEEN('2023-02-28', '2023-01-31');
+------+
| _c0 |
+------+
| 1.0 |
+------+
-- 1 / 31
SELECT MONTHS_BETWEEN("2022-01-04", "2022-01-03");
+-------------+
| _c0 |
+-------------+
| 0.03225806 |
+-------------+
SELECT MONTHS_BETWEEN("20220103", "2022-01-02");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
LAST_DAY(STRING date)
- 定义:
last_day(string date) - 说明:返回指定的日期所在的月份的最后一天的日期,传入字符串支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”
- 返回值类型:string
- 可用版本:hive-1.1.0+
- 案例
SELECT LAST_DAY("2023-01-02 03:07:04");
+-------------+
| _c0 |
+-------------+
| 2023-01-31 |
+-------------+
SELECT LAST_DAY("2022-01-03");
+-------------+
| _c0 |
+-------------+
| 2022-01-31 |
+-------------+
SELECT LAST_DAY("20220103");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
NEXT_DAY(STRING start_date, STRING day_of_week)
- 定义:
next_day(string start_date, string day_of_week) - 说明:返回在start_date之后的下一个day_of_week,比如next_day("2022-01-01", "FRIDAY"):返回2022-01-01之后的下一个星期五,day_of_week支持3种写法:2个字母的缩写、3个字母的缩写以及英文全拼,大小写不敏感,start_date支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”。
- 2个字母的缩写:Mo、Tu、We、Th、Fr、Sa、Su
- 3个字母的缩写:Mon、Tue、Wed、Thu、Fri、Sat、Sun
- 英文全拼:Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday
- 返回值类型:string
- 可用版本:hive-1.2.0+
- 案例
SELECT NEXT_DAY("2023-01-02 03:07:04", "Sunday");
-------------+
| _c0 |
+-------------+
| 2023-01-08 |
+-------------+
SELECT NEXT_DAY("2023-01-02 03:07:04", "Sat");
+-------------+
| _c0 |
+-------------+
| 2023-01-07 |
+-------------+
SELECT NEXT_DAY("2022-01-03", "We");
+-------------+
| _c0 |
+-------------+
| 2022-01-05 |
+-------------+
SELECT NEXT_DAY("20220103", "We");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
TRUNC(STRING date, STRING format)
- 定义:
trunc(string date, string format) - 说明:返回日期被截断之后的日期,比如2022-01-05,从月份开始截断,则保留2022-01,day_of_month设置为01,返回2022-01-01;2022-03-05,从年份开始截断,则保留年份2022,月和日设置为01-01,返回2022-01-01;date支持的格式为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”;format支持的格式为MONTH/MON/MM和YEAR/YYYY/YY,大小写敏感。
- 返回值类型:string
- 可用版本:hive-1.2.0+
- 案例
SELECT TRUNC("2023-03-05 03:07:04", "MONTH");
+-------------+
| _c0 |
+-------------+
| 2023-03-01 |
+-------------+
SELECT TRUNC("2023-03-05 03:07:04", "Month");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
SELECT TRUNC("2023-03-05 03:07:04", "MON");
+-------------+
| _c0 |
+-------------+
| 2023-03-01 |
+-------------+
SELECT TRUNC("2023-03-05 03:07:04", "MM");
+-------------+
| _c0 |
+-------------+
| 2023-03-01 |
+-------------+
SELECT TRUNC("2023-03-05", "YYYY");
+-------------+
| _c0 |
+-------------+
| 2023-01-01 |
+-------------+
SELECT TRUNC("2023-03-05", "YEAR");
+-------------+
| _c0 |
+-------------+
| 2023-01-01 |
+-------------+
SELECT TRUNC("2023-03-05", "yy");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
SELECT TRUNC("20230305", "YEAR");
+-------+
| _c0 |
+-------+
| NULL |
+-------+
CURRENT_DATE
- 常量:返回当前日期
- 返回值类型:date
- 可用版本:hive-1.2.0+
- 案例:
SELECT CURRENT_DATE;
+-------------+
| _c0 |
+-------------+
| 2023-01-16 |
+-------------+
CURRENT_TIMESTAMP
- 常量:返回当前日期时间
- 返回值类型:timestamp
- 可用版本:hive-1.2.0+
- 案例:
SELECT CURRENT_TIMESTAMP;
+-------------------------+
| _c0 |
+-------------------------+
| 2023-01-16 11:23:54.35 |
+-------------------------+