文章目录
-
-
-
- 一、基础时间函数
- 二、日期加减操作
- 三、日期格式化与解析
- 四、时间差计算
- 五、时间类型转换
- 六、时区处理
- 示例
-
- 获取当前时间并格式化
- [日期增加 3 天](#日期增加 3 天)
- 计算两个日期的天数差
- 注意事项:
-
-
以下是 SQL
中常用的时间处理函数汇总,涵盖 MySQL
和 Hive
的差异:
一、基础时间函数
功能 | MySQL | Hive |
---|---|---|
当前时间(日期 + 时间) | NOW() / CURRENT_TIMESTAMP() | current_timestamp() |
当前日期 | CURDATE() / CURRENT_DATE() | current_date() |
当前时间 | CURTIME() | current_time() |
二、日期加减操作
功能 | MySQL | Hive |
---|---|---|
日期增加 / 减少 | DATE_SUB(date, INTERVAL n DAY) | date_sub(date, n) |
月份增加 / 减少 | DATE_SUB(date, INTERVAL n MONTH) | add_months(date, n) |
年份增加 / 减少 | DATE_SUB(date, INTERVAL n YEAR) | date_sub(date, n * 365)(近似) |
时间增加秒数 | DATE_ADD(time, INTERVAL n SECOND) | date_add(time, n) |
三、日期格式化与解析
功能 | MySQL | Hive |
---|---|---|
格式化日期 | DATE_FORMAT(date, format) | date_format(date, format) |
解析字符串为日期 | STR_TO_DATE(str, format) | from_utc_timestamp(unix_timestamp(str), 'Asia/Shanghai') |
提取年份 | YEAR(date) | year(date) |
提取月份 | MONTH(date) | month(date) |
提取日期 | DAY(date) | day(date) |
提取季度 | QUARTER(date) | quarter(date) |
四、时间差计算
功能 | MySQL | Hive |
---|---|---|
日期差(天数) | DATEDIFF(end_date, start_date) | datediff(end_date, start_date) |
时间差(秒数) | TIMESTAMPDIFF(SECOND, start, end) | unix_timestamp(end) - unix_timestamp(start) |
五、时间类型转换
功能 | MySQL | Hive |
---|---|---|
时间戳转日期 | FROM_UNIXTIME(timestamp) | from_utc_timestamp(timestamp, 'Asia/Shanghai') |
日期转时间戳 | UNIX_TIMESTAMP(date) | unix_timestamp(date) |
字符串转时间戳 | UNIX_TIMESTAMP(str, format) | unix_timestamp(str, format) |
六、时区处理
功能 | MySQL | Hive |
---|---|---|
转换时区 | CONVERT_TZ(time, from_tz, to_tz) | from_utc_timestamp(time, 'Asia/Shanghai') |
示例
获取当前时间并格式化
sql
MySQL: SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
Hive: SELECT date_format(current_timestamp(), 'yyyy-MM-dd HH:mm:ss')
日期增加 3 天
sql
MySQL: SELECT DATE_SUB('2025-03-07', INTERVAL 3 DAY)
Hive: SELECT date_sub('2025-03-07', 3)
计算两个日期的天数差
sql
MySQL: SELECT DATEDIFF('2025-03-10', '2025-03-07')
Hive: SELECT datediff('2025-03-10', '2025-03-07')
注意事项:
MySQL
和Hive
的函数名称和参数顺序可能存在差异(如Hive
的date_sub
直接使用数值而非INTERVAL
)。Hive
通常需要显式处理时区(如from_utc_timestamp
),而MySQL
可通过会话时区设置简化操作。