以下是 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’) |
示例
获取当前时间并格式化
MySQL: SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
Hive: SELECT date_format(current_timestamp(), 'yyyy-MM-dd HH:mm:ss')
日期增加 3 天
MySQL: SELECT DATE_SUB('2025-03-07', INTERVAL 3 DAY)
Hive: SELECT date_sub('2025-03-07', 3)
计算两个日期的天数差
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
可通过会话时区设置简化操作。
所有评论(0)