系列文章目录
前言
收录hive2.1版本中所有的日期函数。
标红的函数为常用函数。
函数列表
分类 | 返回类型 | 函数名 | 入参 | 描述 |
将时间戳格式化 | string | from_unixtime(bigint unixtime) | 秒级时间戳->字符串, 默认pattern为: yyyy-MM-dd HH:mm:ss | |
string | from_unixtime(bigint unixtime, string pattern]) | 秒级时间戳->字符串, 同时指定pattern | ||
转换为时间戳 | bigint | unix_timestamp() | 无 | 获取当前时间戳,秒为单位,共10位 |
bigint | unix_timestamp(str) | datetime字符串 | 字符串->时间戳。 示例:unix_timestamp('2009-03-20 11:30:01') = 1237573801 | |
bigint | unix_timestamp(str,str) | datetime字符串, 字符串模式 | 示例:unix_timestamp('2009-03-20', 'uuuu-MM-dd') = 1237532400 | |
字符串格式化为日期 | 2.1之前,string 2.1开始,date | to_date(string timestamp) | 将字符串, 转换为日期, 只有日期部分 | |
提取 | int | year(string date) | 提取日期中的"年份" | |
quarter(date/timestamp/string) | 提取日期中的"季度", 根据日期解析季度, 返回数字 | |||
month(string date) | 提取日期中的"月份" | |||
day(string date) dayofmonth(date) | 提取日期中的"日数" | |||
hour(string date) | 提取日期时间中的"小时" | |||
minute(string date) | 提取日期时间中的"分钟" | |||
second(string date) | 提取日期时间中的"秒数" | |||
weekofyear(string date) | 提取日期时间中的"周数" | |||
extract(field FROM source) | 语法略复杂, 且它的使用场景均可用上述提取函数代替, 故此不作赘述 | |||
日期相减 | int | datediff(string enddate, string startdate) | 将两个日期相减, 得到天数 | |
日期加数 | pre 2.1.0: string 2.1.0 on: date | date_add(date/timestamp/string startdate, tinyint/smallint/int days) | 往一个日期上添加天数 示例: date_add('2008-12-31', 1) 返回 '2009-01-01' | |
日期减数 | 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' | |
当前时间 | date | current_date | 返回当前日期, 同一个查询中,多次调用该函数,返回同一个值! | |
timestamp | current_timestamp | 返回当前时间戳, 同一个查询中,多次调用该函数,返回同一个值! | ||
日期-月份加数 | string | add_months(string start_date, int num_months, output_date_format) | 对一个日期, 进行月份上加数操作 示例: add_months('2024-03-20', 1) 返回 2024-04-20; 月份加数后,若超过该月实际的天数,自动降为该月的最后一天! 示例: add_months('2024-03-31', 1) 返回 2024-04-30; | |
月份最后一天 | string | last_day(string date) | 返回日期所属月份的最后一天 | |
下一天 | string | next_day(string start_date, string day_of_week) | 计算一个日期之后的, 下一个day of week, 示例: select next_day('2024-03-21','mo') 返回 2024-03-25, mo代表Monday, 21号之后的星期一是25号, 支持的day of week:2个字母,3个字母,或者是全拼, 星期一可以是:mo,mon,monday | |
日期截断 | string | trunc(string date, string format) | 日期, 截断格式 | 对一个日期进行截断, 支持年份截断和月份截断,截断格式为:MONTH/MON/MM、YEAR/YYYY/YY 示例如下: trunc('2015-03-17', 'MM') 返回 2015-03-01, 把当前月份截断,当前月份回到当月第一天! |
月份差值 | double | months_between(date1, date2) | ||
日期格式化 | string | date_format(date/timestamp/string ts, string pattern) | 日期, 格式化字符串 | 将日期,按照指定的格式化模板,进行格式化, 返回格式化字符串 |