hive常用日期函数

这篇博客整理了Hive中的日期函数,包括获取日期、时间戳、日期时间转换、时间戳格式化等,还介绍了如date_format、年、季度、周等详细操作,并探讨了next_day函数在按周汇总数据中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作原因有时候需要使用到hive的日期函数,但是很多东西都记不住,每次网上去找又浪费时间,干脆自己整理一个。

  • 获取日期

    select current_date(); --返回2021-04-26
    
  • 获取时间戳

    # 单位:秒 返回bigint
    select unix_timestamp(); --返回1619401695
    
  • 获取日期时间

    select current_timestamp(); --返回2021-04-25 19:48:43.153
    
  • 格式化时间戳

    select from_unixtime(1619351633,'yyyy-MM-dd') --返回结果 2021-04-25
    
    select from_unixtime(1590681600,'yyyyMMdd') --返回结果 20210425
     
    select from_unixtime(1590729143,'yyyy-MM-dd HH:mm:ss') --返回结果 2021-04-25 19:53:53
     
    select from_unixtime(1590729143) --返回结果 --2021-04-25 19:53:53 不加默认 yyyy-MM-dd HH:mm:ss 格式
     
    select from_unixtime(unix_timestamp('2021-04-25','yyyy-MM-dd'),'Y年') --返回结果 2021年
     
    select from_unixtime(unix_timestamp('2021-04-25','yyyy-MM-dd'),'yyyy-MM') --返回结果 2021-04
     
    select from_unixtime(unix_timestamp('20210425','yyyyMMdd'),'yyyy-MM-dd')  --返回结果 2021-04-25
     
    select from_unixtime(unix_timestamp('2021-04-25','yyyy-MM-dd'),'EEEE') --返回结果 Sunday
     
    select from_unixtime(unix_timestamp('2021-04-25','yyyy-MM-dd'),'w') --返回第几周(18)
     
    select from_unixtime(unix_timestamp('2021-04-25','yyyy-MM-dd'),'u') -- 返回本周的第几天(7)
     
    select from_unixtime(unix_timestamp('2021-04-25','yyyy-MM-dd'),'D') -- 本年的第几天(115)
     
    select from_unixtime(unix_timestamp('2021-04-25','yyyy-MM-dd'),'d') -- 本月的第几天(25)
    
  • 日期转时间戳

    # 参数时可选的,当参数为空时,返回当前Unix是时间戳,精确到秒。可以指定一个具体的日期,转换为Unix时间戳格式
    # unix_timestamp(string datetime,string format)
    # 日期时间
    select uni
### Hive 日期函数与字符串拼接的综合使用 在 Hive 中,日期函数和字符串拼接可以结合起来完成复杂的查询需求。以下是关于 Hive日期函数以及如何将其结果与其他字段通过字符串拼接的方式组合使用的说明。 #### 1. 常见的 Hive 日期函数 Hive 提供了一系列强大的日期处理函数来满足不同的业务需求。常用日期函数包括但不限于以下几种: - **from_unixtime(unix_time)** 将 Unix 时间戳转换为指定格式的时间字符串[^2]。例如:`from_unixtime(1672531200, 'yyyy-MM-dd')` 返回 `'2023-01-01'`。 - **unix_timestamp(date_string, format)** 将给定时间字符串按照指定格式解析并返回对应的 Unix 时间戳[^2]。例如:`unix_timestamp('2023-01-01', 'yyyy-MM-dd')` 返回 `1672531200`。 - **date_add(start_date, num_days)** 和 **date_sub(start_date, num_days)** 对某个起始日期增加或减少数[^2]。例如:`date_add('2023-01-01', 1)` 返回 `'2023-01-02'`;而 `date_sub('2023-01-01', 1)` 则返回 `'2022-12-31'`。 - **datediff(end_date, start_date)** 计算两个日期之间的差值(单位为)[^2]。例如:`datediff('2023-01-02', '2023-01-01')` 返回 `1`。 --- #### 2. 字符串拼接方法回顾 Hive 支持多种字符串拼接方式,具体如下: - **CONCAT 函数** 只能用于简单的字符串连接操作,不支持自定义分隔符[^1]。例如:`CONCAT('abc', '-', 'def')` 返回 `'abcdef-'`。 - **CONCAT_WS 函数** 使用指定的分隔符将多个字符串连接起来[^2]。例如:`CONCAT_WS('-', 'abc', 'def')` 返回 `'abc-def'`。 - **|| 运算符** 是一种更简洁的字符串拼接方式,适用于基本场景下的字符串连接[^3]。需要注意的是,如果其中一方不是字符串,则需要显式转换为其类型[^4]。例如:`SELECT 'Hello' || ' World';` 返回 `'Hello World'`。 --- #### 3. 综合示例:日期函数与字符串拼接结合 下面是一个具体的例子,展示如何利用 Hive日期函数和字符串拼接技术生成新的字段。 假设有一张表 `orders`,结构如下: | order_id | customer_name | order_date | |----------|---------------|------------------| | 1 | Alice | 2023-01-01 | | 2 | Bob | 2023-01-02 | 目标是创建一个新的字段,显示客户的姓名及其订单日期加一后的信息。 ```sql SELECT customer_name, date_add(order_date, 1) AS next_day_order_date, CONCAT(customer_name, ': Next day is ', date_add(order_date, 1)) AS info_with_concat, CONCAT_WS(' -> ', customer_name, date_add(order_date, 1)) AS info_with_concat_ws FROM orders; ``` 运行以上 SQL 后的结果可能如下所示: | customer_name | next_day_order_date | info_with_concat | info_with_concat_ws | |--------------|----------------------|-------------------------------------|------------------------------| | Alice | 2023-01-02 | Alice: Next day is 2023-01-02 | Alice -> 2023-01-02 | | Bob | 2023-01-03 | Bob: Next day is 2023-01-03 | Bob -> 2023-01-03 | 此示例展示了如何灵活运用 Hive日期函数和字符串拼接功能构建复杂的数据视图。 --- #### 4. 注意事项 - 如果涉及跨类型的运算(如整数与字符串),需先进行类型转换再执行拼接操作。 - 当数据集中存在 NULL 值时,建议提前对其进行填充或者过滤,以免影响最终结果[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值