Hive日期函数

add_months, extract, from_unixtime, to_unix_timestamp, unix_timestamp, to_timestamp, to_date, tdh_todate, day, dayofmonth, dayofyear, quater, hour, minute, second, weekofyear, datediff, date_add, date_sub, date_format, str_to_date, sysdate

函数名 返回类型 描述
add_months(date,integer) String 返回date加上integer个月后 的日期。

说明
参数date应该是datetime value,或者可以隐性转换成DATE类型;参数integer应该是整数型, 或者可以隐形转换成整数型。

举例
SELECT add_months('201501',1) FROM system.dual LIMIT 1;
Result: 201502
函数名 返回类型 描述
extract(date,integer) String 抽取日期类型中的年/月/日

说明
参数date应该是datetime value,或者可以隐性转换成DATE类型;参数integer应该是整数型, 或者可以隐形转换成整数型。

举例
SELECT EXTRACT(year from '2015-01-15') FROM system.dual LIMIT 1;
Result: 2015
函数名 返回类型 描述
to_unix_timestamp(date[, pattern])
BigInt 把日期格式转化为UNIX时间戳

说明
返回从"1970-01-01 8:00:00"开始,到指定时间为止的秒数。 参数一最好是date类型,也支 持其他字符类型; 参数二可选,作用是指定参数一的格式,如’yyyy-MM-dd HH:mm:ss’,如 果参数二指定的格式和参数一不匹配,则返回null。

举例
select to_unix_timestamp("2015-01-15",'yyyy-MM-dd') from system.dual limit 1;
Result: 1421251200
**函数名 返回类型 描述
unix_timestamp([date[, pattern]])
BigInt 把日期格式转化为UNIX时间 戳**

说明
返回从"1970-01-01 8:00:00"开始,到指定时间为止的秒数。 如果不加参数,则返回当前系 统时间的UNIX时间戳。 参数一最好是date类型,也支持其他字符类型; 参数二可选,作用是 指定参数一的格式,如’yyyy-MM-dd HH:mm:ss’,如果参数二指定的格式和参数一不匹配,则 返回null。

举例
select unix_timestamp("2015-01-15",'yyyy-MM-dd') from system.dual limit 1;
Result: 1421251200
函数名 返回类型 描述
to_timestamp( [date[, pattern]])
BigInt 把日期格式转化为UNIX时间 戳

说明
和unix_timestamp用法完全一致

举例
select to_timestamp("2015-01-15",'yyyy-MM-dd') from system.dual limit 1;
Result: 1421251200
函数名 返回类型 描述
from_unixtime(unix_time[, format])
String 把UNIX时间戳转化为时间格 式

说明
参数一是long类型,或者可以隐性转换成long类型的UNIX时间戳; 参数二可选,是字符类 型,指定了返回的时间格式。当没有参数二时,返回标准的’yyyy-MM-dd HH:mm:ss’时间格 式。

举例
SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss') FROM system.dual LIMIT 1;
Result: 1970-01-01 08:00:00
函数名 返回类型 描述
to_date(date) String 把字符串或者日期字符转化 为yyyy-MM-dd的日期格式

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。

举例
SELECT to_date('2015-01-15 04:17:52') FROM system.dual LIMIT 1;
Result: 2015-01-15
函数名 返回类型 描述
tdh_todate(date[, originalformat,targetformat]) String 把字符按照给定的格式,转 化为标准日期格式,或者指 定格式

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日 期一个参数,系统会自动识别yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd格式的字符或日期,然后 返回yyyy-MM-dd格式的日期字符,其他返回NULL。当指定了originalformat(String类型的 原始日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL, 建议手动指定originalformat。参数targetformat也是String类型,指定返回的日期格式, 如yyyyMMdd。三个参数date、originalformat和targetformat都可以包含时分秒。但是 originalformat和targetformat缺省的情况下,tdh_todate只返回yyyy-MM-dd格式的年月日。 所以要转换包含时分秒信息的日期必须指定original format和targetformat。时分秒的格式 为HH:mm:ss(24小时制)或者hh:mm:ss(12小时制)。

举例
SELECT TDH_TODATE('2015-01-15 00:00:00') FROM inceptor_nt0.transactions_ext LIMIT 1;
Result: 2015-01-15
SELECT TDH_TODATE('2015-11-24 18:00:00','yyyy-MM-dd HH:mm:ss','yyyy/MM/dd hh:mm:ss')
 FROM map_test LIMIT 1;
Result: 2015/11/24 06:00:00
函数名 返回类型 描述
day(date) Int 返回指定时间是该月的第几 天

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。另外date必须 是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则也返回NULL。

举例
SELECT day('2015-01-15') FROM system.dual LIMIT 1;
Result: 15
函数名 返回类型 描述
dayofmonth(date) Int 返回指定时间是该月的第几 天

说明
用法和函数day完全一致。

举例
SELECT dayofmonth('2015-01-15') FROM system.dual LIMIT 1;
Result: 15
函数名 返回类型 描述
dayofyear(date[,formatt]) Int 返回指定日期是该年的第几 天

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日 期一个参数,系统会自动识别yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd三种格式的字符或日期,然 后返回日期是该年的第几天,其他格式返回NULL。当指定了第二个可选参数(String类型的日 期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL,建议手 动指定第二个参数。

举例
SELECT dayofyear('2015|01|15','yyyy|MM|dd') FROM system.dual LIMIT 1;
Result: 15
函数名 返回类型 描述
quater(date[,formatt]) Int 返回指定日期是该年的第几 季度

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日 期一个参数,系统会自动识别yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd三种格式的字符或日期,然 后返回日期是该年的第几季度,其他格式返回NULL。当指定了第二个可选参数(String类型的 日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL,建议 手动指定第二个参数。
举例

SELECT quater('2015|06|15','yyyy|MM|dd') FROM system.dual LIMIT 1;
Result: 2
函数名 返回类型 描述
hour(date) Int 返回指定时间是该日的第几 个小时

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须yyyy-MM-dd HH:MM:SS的 格式,否则返回NULL。

举例
SELECT hour('2015-01-30 22:58:59') FROM system.dual LIMIT 1;
Result: 22
函数名 返回类型 描述
minute(date) Int 返回指定时间是该小时的第 多少分钟

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是yyyy-MM-dd HH:MM:SS 的格式,否则返回NULL。

举例
SELECT minute('2015-01-30 22:58:59') FROM system.dual LIMIT 1;
Result: 58
函数名 返回类型 描述
second(date) Int 返回指定时间是该分钟的第 多少秒

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是yyyy-MM-dd HH:MM:SS 的格式,否则返回NULL。

举例
SELECT second('2015-01-30 22:58:59') FROM system.dual LIMIT 1;
Result: 59
函数名 返回类型 描述
weekofyear(date) Int 返回指定日期是该年的第几 周

说明
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者 yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。我们把周一作为一周的开始,同时第一个有着4 天及以上的周,是第一周。

举例
SELECT weekofyear('2015-01-15 22:58:59') FROM system.dual LIMIT 1;
Result: 3
函数名 返回类型 描述
datediff(date1, date2) Int 返回两个日期的相差天数

说明
参数date1/date2必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd 或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。返回值为正说明date1较晚。

举例
SELECT datediff('2015-01-15', '2015-02-08') FROM system.dual LIMIT 1;
Result: -24
函数名 返回类型 描述
date_add(start_date, num_days)
string 返回指定时间之后的第 num_days天的时间

说明
参数start_date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd 或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。参数num_days必须是Int类型或者可以隐式 转化为Int类型

举例
SELECT date_add('2015-01-15', 1) FROM system.dual LIMIT 1;
Result: 2015-01-16
函数名 返回类型 描述
date_sub(start_date, num_days)
string 返回指定时间之前的第 num_days天的时间

说明
参数start_date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd 或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。参数num_days必须是Int类型或者可以隐式 转化为Int类型

举例
SELECT date_sub('2015-01-15', 1) FROM system.dual LIMIT 1;
Result: 2015-01-14
函数名 返回类型 描述
date_format(dateText, pattern)
DATE 把时间转化为指定的格式

说明
参数date必须是’yyyy-MM-dd HH:mm:ss’的字符或者Date、Timestamp格式,否则返回值为 NULL;参数二必须是字符格式,指定了返回日期的格式。
举例

select date_format('2015-01-15 00:00:00','yyyyMMdd') from system.dual limit 1;
Result: 20150115

函数名 返回类型 描述
str_to_date(dateText, pattern)
date 根据指定的格式来解析日期 并转化为标准格式
说明
参数date必须是字符或者Date、Timestamp格式,否则返回值为NULL;参数二必须是字符格 式,指定了dateText的日期格式。最后返回的是标准的’yyyy-MM-dd HH:mm:ss’格式的时 间。
举例

select str_to_date('2015|01|15','yyyy|MM|dd') from system.dual limit 1;
Result: 2015-01-15 00:00:00
函数名 返回类型 描述
sysdate date 返回当前系统时间
说明
返回的时间是’yyyy-MM-dd HH:mm:ss’格式
举例
SELECT sysdate() FROM system.dual LIMIT 1;
Result: 2015-07-24 23:14:09