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_unixtimehive.local.time.zone 影响。
  • 版本差异 :Hive 3.0 之前 to_date 返回 STRING,之后返回 DATE

相关推荐
juniperhan2 小时前
Flink 系列第9篇:Flink 重启策略详解
java·大数据·数据仓库·flink
隐于花海,等待花开21 小时前
FIND_IN_SET 与 LIKE 函数:使用场景及性能对比
hive
夕除1 天前
javaweb--04
数据仓库·hive·hadoop
juniperhan2 天前
Flink 系列第4篇:Flink 时间系统与 Timer 定时器实战精讲
java·大数据·数据仓库·flink
juniperhan2 天前
link 系列第7篇:Flink 状态管理全解析(原理+类型+存储+实操)
大数据·数据仓库·flink
juniperhan2 天前
Flink 系列第6篇:Watermark 水印全解析(原理+实操+避坑)
大数据·数据仓库·flink
武子康3 天前
大数据-264 实时数仓-MySQL Binlog配置详解:从原理到实践|数据恢复与主从复制实战
大数据·hadoop·后端
武子康3 天前
大数据-265 实时数仓-Canal MySQL Binlog配置详解:从原理到实践|数据恢复与主从复制实战
大数据·hadoop·后端
晓纪同学3 天前
WPF-03 第一个WPF程序
大数据·hadoop·wpf