提示
Hive SQL 教程 欢迎使用。提供建议、纠错、催更等加作者微信: gairuo123(备注:sql )和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Hive支持以下内置日期函数:
返回类型 | 用法 | 说明 |
---|---|---|
string |
from_unixtime(bigint unixtime[, string format]) |
将 unix 纪元(从 1970-01-01 00:00:00 UTC 开始)中的秒数转换为表示当前系统时区中,该时刻的时间戳的字符串,格式如 “1970-01-01 00:00:00”。 |
bigint |
unix_timestamp() |
以秒为单位获取当前 Unix 时间戳。这个函数不是确定性的,并且它的值对于查询执行的范围不是固定的,因此妨碍了查询的适当优化——从2.0开始,它就被弃用,取而代之的是 CURRENT_TIMESTAMP 常量。 |
bigint |
unix_timestamp(string date) |
使用默认时区和默认区域设置,将格式为 |
bigint |
unix_timestamp(string date, string pattern) |
使用给定模式转换时间字符串 (参见) 到 Unix 时间戳(秒),如果失败,则返回 0。例如 unix_timestamp('2009-03-20', 'yyyy-MM-dd') = 1237532400. |
2.1.0 前: string |
to_date(string timestamp) |
返回时间戳字符串的日期部分 (Hive 2.1.0 前),如 to_date("1970-01-01 00:00:00") = "1970-01-01". 在 Hive 2.1.0 中, 返回一个日期对象。在Hive 2.1.0之前 (HIVE-13248) 返回类型是字符串,因为创建方法时不存在日期类型。 |
int |
year(string date) |
返回日期或时间戳字符串的年份部分。如 year("1970-01-01 00:00:00") = 1970 及 year("1970-01-01") = 1970. |
int |
quarter(date/timestamp/string) | 返回 1 到 4 范围内的日期、时间戳或字符串的季度序数 (始于 Hive 1.3.0). 如 quarter('2015-04-08') = 2. |
int |
month(string date) |
返回日期或时间戳字符串的月份部分,如 month("1970-11-01 00:00:00") = 11 及 month("1970-11-01") = 11. |
int |
day(string date) dayofmonth(date) |
返回日期或时间戳字符串的日期部分,如 day("1970-11-01 00:00:00") = 1 及 day("1970-11-01") = 1. |
int |
hour(string date) |
返回时间戳的小时数,如 hour('2009-07-30 12:58:59') = 12 及 hour('12:58:59') = 12. |
int |
minute(string date) |
返回时间戳的分钟数。 |
int |
second(string date) |
返回第二个时间戳。 |
int |
weekofyear(string date) |
返回时间戳字符串的周数。如 weekofyear("1970-11-01 00:00:00") = 44 及 weekofyear("1970-11-01") = 44. |
int |
extract(field FROM source) |
从 source 表中检索天或小时等字段 (始于 Hive 2.2.0). source 中的字段必须是日期、时间戳、间隔或可以转换为日期或时间戳的字符串。支持的字段包括:day、dayofweek、hour、minute、month、quarter、second、week 和 year。 例如:
|
int |
datediff(string enddate, string startdate) |
返回从 startdate 到 enddate 的天数。如 datediff('2009-03-01', '2009-02-27') = 2. |
2.1.0 前: string 2.1.0 及后: date |
date_add(date/timestamp/string startdate, tinyint/smallint/int days) |
向 startdate 添加天数。如 date_add('2008-12-31', 1) = '2009-01-01'。在 Hive 2.1.0 (HIVE-13248) 前,返回类型是字符串,因为创建方法时不存在日期类型。 |
pre 2.1.0: string 2.1.0 on: date |
date_sub(date/timestamp/string startdate, tinyint/smallint/int days) |
减去开始日期的天数。如 date_sub('2008-12-31', 1) = '2008-12-30'。在 Hive 2.1.0 (HIVE-13248) 前,返回类型是字符串,因为创建方法时不存在日期类型。 |
timestamp |
from_utc_timestamp({any primitive type} ts, string timezone) |
将UTC中的 时间戳(timestamp)* 转换为给定时区 (as of Hive 0.8.0)。timestamp 是一种基本类型,包括 timestamp/date、tinyint/smallint/int/bigint、float/double 和 decimal。分数值被视为秒。整数值被视为毫秒。如, from_utc_timestamp(2592000.0,'PST'), from_utc_timestamp(2592000000,'PST') 和 from_utc_timestamp(timestamp '1970-01-30 16:00:00','PST') 全部返回 1970-01-30 08:00:00 的时间戳。 |
timestamp |
to_utc_timestamp({any primitive type} ts, string timezone) |
将给定时区中的时间戳*(同上逻辑)转换为UTC (始于 Hive 0.8.0)。将给定时区中的时间戳*转换为UTC,如 to_utc_timestamp(2592000.0,'PST'), to_utc_timestamp(2592000000,'PST') 和 to_utc_timestamp(timestamp '1970-01-30 16:00:00','PST') 全部返回 1970-01-30 08:00:00 的时间戳。 |
date | current_date |
返回查询计算开始时的当前日期 (始于 Hive 1.2.0),同一查询中 current_date 的所有调用返回相同的值。 |
timestamp | current_timestamp |
返回查询计算开始时的当前时间戳 (始于 Hive 1.2.0),同一查询中 current_timestamp 的所有调用返回相同的值。 |
string | add_months(string start_date, int num_months, output_date_format) |
返回开始日期后数个月的日期 (始于 Hive 1.1.0),start_date 是字符串、日期或时间戳。num_months 是一个整数。如果开始日期是该月的最后一天,或者如果结果月份的天数少于开始日期的天数部分,则结果是结果月份的最后一天。否则,结果具有与开始日期相同的日期成分。默认输出格式为“yyyy-MM-dd”。 在 Hive 4.0.0 之前,日期的时间部分将被忽略。从 Hive 4.0.0 开始,add_months 支持可选的参数 output_date_format 格式,该格式接受表示输出有效日期格式的字符串。这允许在输出中保留时间格式。 例如 : add_months('2009-08-31', 1) 返回 '2009-09-30'. |
string | last_day(string date) |
返回日期所属月份的最后一天(从 Hive 1.1.0 开始)。日期是格式为 “yyyy-MM-dd HH:MM:ss” 或 “yyyy-MM-dd” 的字符串。日期的时间部分被忽略。 |
string | next_day(string start_date, string day_of_week) |
返回第一个日期,该日期晚于 start_date,并命名为 day_of_week(从 Hive 1.2.0 开始)。开始日期是一个字符串/日期/时间戳。一周中的一天是一周中的两个字母、三个字母或全名(例如 Mo, tue, FRIDAY)。开始日期的时间部分被忽略。例如: next_day('2015-01-14', 'TU') = 2015-01-20. |
string | trunc(string date, string format) | 返回截断为格式指定单位的日期 (始于 Hive 1.2.0).支持的格式: MONTH/MON/MM, YEAR/YYYY/YY. 例如: trunc('2015-03-17', 'MM') = 2015-03-01. |
double | months_between(date1, date2) |
返回 date1 和 date2 之间的月数(从 Hive 1.2.0 开始)。如果 date1 晚于 date2,则结果为正,反之为负值。如果 date1 和 date2 是一个月的同一天,或者是两个月的最后几天,那么结果总是一个整数。否则,UDF 将基于31天的月份计算结果的分数部分,并考虑时间成分 date1 和 date2 的差异。date1 和 date2 类型可以是格式为“yyyy-MM-dd”或“yyy-MM-dd HH:MM:ss”的日期、时间戳或字符串。结果四舍五入到小数点后8位。例如:months_between('1997-02-28 10:30:00', '1996-10-30') = 3.94959677 |
string | date_format(date/timestamp/string ts, string fmt) |
将一个 date/timestamp/string 转为 日期格式 fmt 指定格式的字符串值 (始于 Hive 1.2.0). 支持的格式是Java SimpleDataFormat格式 – https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html. 第二个参数fmt应该是常量。如 date_format('2015-04-08', 'y') = '2015'. date_format 可用于实现其他 UDF,例如:
|
更新时间:2024-11-23 15:18:49 标签:hql 时间 sql