HIVE日期函数大全

Hive 日期函数详解目录及详细说明,按功能分类并编号,方便查阅。


📑 目录

一、获取当前时间

  • 1.1 current_date
  • 1.2 current_timestamp

二、日期加减运算

  • 2.1 date_add
  • 2.2 date_sub
  • 2.3 add_months
  • 2.4 last_day
  • 2.5 next_day

三、日期差值计算

  • 3.1 datediff
  • 3.2 months_between

四、提取日期/时间部分

  • 4.1 year
  • 4.2 month
  • 4.3 day / dayofmonth
  • 4.4 hour
  • 4.5 minute
  • 4.6 second
  • 4.7 quarter
  • 4.8 weekofyear
  • 4.9 dayofweek

五、日期格式化与类型转换

  • 5.1 date_format
  • 5.2 to_date
  • 5.3 cast (转换为日期)
  • 5.4 unix_timestamp
  • 5.5 from_unixtime

六、时区转换

  • 6.1 to_utc_timestamp
  • 6.2 from_utc_timestamp

七、日期截断 / 特殊操作

  • 7.1 trunc
  • 7.2 date_part

详细说明

一、获取当前时间

1.1 current_date
  • 语法 :current_date()

  • 返回值 :DATE

  • 说明 :返回查询执行时的当前日期(yyyy-MM-dd)。

  • 示例 :

    sql 复制代码
    SELECT current_date();  -- 2026-04-13
1.2 current_timestamp
  • 语法 :current_timestamp()

  • 返回值 :TIMESTAMP

  • 说明:返回当前时间戳,精确到毫秒。

  • 示例 :

    sql 复制代码
    SELECT current_timestamp();  -- 2026-04-13 15:30:45.123

二、日期加减运算

2.1 date_add
  • 语法 :date_add(date, days)

  • 参数 :date (DATE/STRING), days (INT)

  • 返回值 :DATE

  • 说明 :给指定日期加上 days 天(可为负数)。

  • 示例 :

    sql 复制代码
    SELECT date_add('2026-04-13', 5);   -- 2026-04-18
    SELECT date_add('2026-04-13', -3);  -- 2026-04-10
2.2 date_sub
  • 语法 :date_sub(date, days)

  • 返回值 :DATE

  • 说明 :减去 days 天(相当于 date_add(date, -days))。

  • 示例 :

    sql 复制代码
    SELECT date_sub('2026-04-13', 5);   -- 2026-04-08
2.3 add_months
  • 语法 :add_months(date, months)

  • 返回值 :DATE

  • 说明 :增加 months 个月,处理月末逻辑(如1月31日加1个月得到2月28日)。

  • 示例 :

    sql 复制代码
    SELECT add_months('2026-01-31', 1);  -- 2026-02-28
2.4 last_day
  • 语法 :last_day(date)

  • 返回值 :DATE

  • 说明:返回该日期所在月份的最后一天。

  • 示例 :

    sql 复制代码
    SELECT last_day('2026-04-13');  -- 2026-04-30
2.5 next_day
  • 语法 :next_day(date, dow)

  • 参数 :dow 为星期几(如 'Monday', 'Tue', 'Friday' 等)

  • 返回值 :DATE

  • 说明:返回指定日期后下一个星期几的日期。

  • 示例 :

    sql 复制代码
    SELECT next_day('2026-04-13', 'Friday');  -- 2026-04-17

三、日期差值计算

3.1 datediff
  • 语法 :datediff(enddate, startdate)

  • 返回值 :INT

  • 说明 :返回 enddate - startdate 的天数。

  • 示例 :

    sql 复制代码
    SELECT datediff('2026-04-13', '2026-04-01');  -- 12
3.2 months_between
  • 语法 :months_between(date1, date2)

  • 返回值 :DOUBLE

  • 说明 :返回 date1 - date2 的月数(可能带小数)。

  • 示例 :

    sql 复制代码
    SELECT months_between('2026-04-13', '2026-01-01');  -- 3.387...

四、提取日期/时间部分

4.1 year
  • 语法 :year(date)
  • 返回值 :INT
  • 示例 :SELECT year('2026-04-13'); → 2026
4.2 month
  • 返回值 :INT (1~12)
  • 示例 :SELECT month('2026-04-13'); → 4
4.3 day / dayofmonth
  • 返回值 :INT (1~31)
  • 示例 :SELECT day('2026-04-13'); → 13
4.4 hour
  • 语法 :hour(timestamp)
  • 示例 :SELECT hour('2026-04-13 15:30:00'); → 15
4.5 minute
  • 示例 :SELECT minute('2026-04-13 15:30:00'); → 30
4.6 second
  • 示例 :SELECT second('2026-04-13 15:30:45'); → 45
4.7 quarter
  • 返回值 :INT (1~4)
  • 示例 :SELECT quarter('2026-04-13'); → 2
4.8 weekofyear
  • 返回值 :INT (1~53)
  • 示例 :SELECT weekofyear('2026-04-13'); → 16
4.9 dayofweek
  • 返回值 :INT (1=星期一, 7=星期日)
  • 示例 :SELECT dayofweek('2026-04-13'); → 1

五、日期格式化与类型转换

5.1 date_format
  • 语法 :date_format(date, pattern)

  • 返回值 :STRING

  • 说明 :使用 Java SimpleDateFormat 模式将日期转为字符串。

  • 示例 :

    sql 复制代码
    SELECT date_format('2026-04-13', 'yyyy年MM月dd日');  -- 2026年04月13日
5.2 to_date
  • 语法 :to_date(string)

  • 返回值 :DATE

  • 说明 :将日期时间字符串的日期部分提取为 DATE 类型。

  • 示例 :

    sql 复制代码
    SELECT to_date('2026-04-13 15:30:00');  -- 2026-04-13
5.3 cast
  • 语法 :cast(string as date)

  • 返回值 :DATE

  • 说明 :仅当字符串为 yyyy-MM-dd 格式时有效。

  • 示例 :

    sql 复制代码
    SELECT cast('2026-04-13' as date);
5.4 unix_timestamp
  • 语法 :unix_timestamp([date[, pattern]])

  • 返回值 :BIGINT

  • 说明:将日期字符串转为 Unix 时间戳(秒)。无参数时返回当前时间戳。

  • 示例 :

    sql 复制代码
    SELECT unix_timestamp('2026-04-13 15:30:00', 'yyyy-MM-dd HH:mm:ss');
5.5 from_unixtime
  • 语法 :from_unixtime(unixtime[, pattern])

  • 返回值 :STRING

  • 说明 :将 Unix 时间戳转为指定格式的字符串(默认 yyyy-MM-dd HH:mm:ss)。

  • 示例 :

    sql 复制代码
    SELECT from_unixtime(1713000000, 'yyyy-MM-dd');

六、时区转换

6.1 to_utc_timestamp
  • 语法 :to_utc_timestamp(timestamp, timezone)

  • 返回值 :TIMESTAMP

  • 说明:将给定时区的时间戳转为 UTC 时间戳。

  • 示例 :

    sql 复制代码
    SELECT to_utc_timestamp('2026-04-13 15:30:00', 'Asia/Shanghai');
6.2 from_utc_timestamp
  • 语法 :from_utc_timestamp(timestamp, timezone)

  • 返回值 :TIMESTAMP

  • 说明:将 UTC 时间戳转为指定时区的时间戳。

  • 示例 :

    sql 复制代码
    SELECT from_utc_timestamp('2026-04-13 07:30:00', 'Asia/Shanghai');

七、日期截断 / 特殊操作

7.1 trunc
  • 语法 :trunc(date, format)

  • 返回值 :DATE

  • 说明 :将日期截断到指定单位。format 可选 'YY'、'MM'、'DD' 等。

  • 示例 :

    sql 复制代码
    SELECT trunc('2026-04-13', 'MM');  -- 2026-04-01 (当月第一天)
7.2 date_part
  • 语法 :date_part(field, source)

  • 返回值 :INT

  • 说明 :SQL 标准函数,提取 field(如 'year', 'month', 'day', 'hour' 等)的值。

  • 示例 :

    sql 复制代码
    SELECT date_part('year', '2026-04-13');  -- 2026

⚠️ 重要注意事项

  • 输入格式 :多数函数要求日期字符串为 yyyy-MM-dd 格式,否则返回 NULL。可使用 unix_timestamp(...) + from_unixtime(...) 进行格式转换。
  • NULL 处理 :任何参数为 NULL 时,结果均为 NULL。
  • 时区 :TIMESTAMP 类型默认 UTC 时区;unix_timestamp/from_unixtime 受 hive.local.time.zone 影响。
  • 版本差异 :Hive 3.0 之前 to_date 返回 STRING,之后返回 DATE。

相关推荐
ha_lydms2 小时前
Window Functions(窗口函数)
大数据·数据仓库·hadoop·spark·数据处理·dataworks·maxcompute
geovindu8 小时前
sql:Managing Complex Joins and Subqueries in SQL using mysql 9.0
大数据·数据库·数据仓库·sql·mysql·数据库开发·数据库架构
zhangzeyuaaa8 小时前
StarRocks 的技术版图:在分析、检索与流处理之间找到位置
大数据·数据仓库
大鳥10 小时前
JSON 解析最佳实践:从入门到生产级优化
hive·sql·spark·json
geovindu10 小时前
sql:SQL Views and Materialized Views using mysql 9.0
大数据·数据库·数据仓库·sql·mysql·数据库开发·数据库架构
ha_lydms10 小时前
Xml Functions(XML 函数)
xml·大数据·hadoop·spark·数据处理·dataworks·maxcompute
ha_lydms11 小时前
Vector Functions(向量函数)
大数据·hadoop·spark·数据处理·dataworks·maxcompute·数据中台
ha_lydms11 小时前
阿里云大数据组件
大数据·hadoop·阿里云·spark·云计算·数据处理·dataworks
ruxshui1 天前
Hadoop 生产运维实战手册
大数据·运维·hadoop