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。

相关推荐
CarIise15 小时前
Spring Boot整合MyBatis与文件上传:从分层架构到文件上传下载实战
数据仓库·hive·hadoop
计算机源码社18 小时前
【27届大数据毕设】基于Spark的TikTok短视频属性分享与互动比率可视化分析系统 基于机器学习的TikTok短视频认证属性与互动效能关联分析
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
ha_lydms1 天前
MaxCompute中加密与解密函数
大数据·数据库·数据仓库·hadoop·dataworks·maxcompute·odps
Q26433650232 天前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
计算机源码社2 天前
【27届大数据毕设】基于Spark的AI艺术创作者价值评估与市场趋势预测研究 基于Python与Spark的AI生成艺术受众画像及异常热度识别可视化平台
大数据·人工智能·hadoop·python·spark·毕业设计·课程设计
千桐科技2 天前
数据中台 ETL 编排实践:基于 qData 开源版实现数据接入、转换与调度执行
数据仓库·开源·etl
ha_lydms2 天前
MaxCompute中窗口函数
大数据·hadoop·阿里云·云计算·dataworks·maxcompute·odps
千里码aicood2 天前
基于Hadoop的机票价格波动分析系统的设计与实现
大数据·hadoop·分布式
IT毕设梦工厂3 天前
计算机毕业设计选题推荐:基于大数据的供应链数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hive·hadoop·python·数据分析·spark·课程设计
BYSJMG3 天前
计算机毕业设计选题推荐|【基于深度学习的面部关键特征识别与检测】YOLO目标检测+ONNX推理
大数据·hadoop·数据分析·spark·课程设计