这篇列出TCHouse-X 2.0.0及以上版本支持的日期时间函数,涵盖当前系统时间、日期构造、加减差值、属性提取、格式化与转换等操作,并附示例。 当前系统时间:提供current_date、current_timestamp等函数获取执行时刻时间。 日期加减与差值:包括add_months、date_add、datediff等函数用于日期运算。 格式化与转换:提供to_date、date_format、from_u。
相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。
注意:说明:
注意:适用版本:TCHouse-X 内核版本 2.0.0及以上版本。
一、当前系统时间
这些函数用于获取查询执行时刻的系统时间。
| 函数 |
说明 |
示例 |
| current_date() |
返回当前日期。 |
select current_date(); — 2026-01-01 |
| current_timestamp() |
返回当前时间戳(含微秒)。 |
select current_timestamp(); — 2026-01-01 11:30:43.554431 |
| current_timezone() |
返回当前会话的本地时区。 |
select current_timezone(); — Asia/Shanghai |
| unix_timestamp() |
以秒为单位返回当前 UNIX 时间戳。 |
select unix_timestamp(); — 1767468503 |
二、日期与时间戳构造
| 函数 |
说明 |
示例 |
| make_date(y, m, d) |
根据年、月、日整数创建日期。 |
select make_date(2024, 12, 31); — 2024-12-31 |
| make_timestamp(y,m,d,h,mi,s[,tz]) |
创建带时区的时间戳。秒可含小数,tz 可选。 |
select make_timestamp(2024, 12, 28, 6, 30, 45.8); — 2024-12-28 06:30:45.8 |
| make_timestamp_ntz(…) |
创建无时区时间戳(NTZ)。 |
select make_timestamp_ntz(2024, 12, 31, 23, 59, 59); — 2024-12-31 23:59:59 |
| date_from_unix_date(n) |
返回 1970-01-01 之后第 n 天的日期。 |
select date_from_unix_date(1); — 1970-01-02 |
三、日期加减与差值
| 函数 |
说明 |
示例 |
| add_months(d, n) |
加 n 月。自动处理月末(如 1-30 加一月为 2-28)。 |
select add_months('2015-01-30', 1); — 2015-02-28 |
| date_add(d, n) |
在日期 d 上增加 n 天。 |
select date_add('2024-12-31', 5); — 2025-01-05 |
| date_sub(d, n) |
在日期 d 上减去 n 天。 |
select date_sub('2024-12-31', 5); — 2024-12-26 |
| datediff(end, start) |
计算两个日期之间的天数差。 |
select datediff('2024-12-31', '2024-12-30'); — 1 |
| months_between(t1, t2) |
返回两个时间戳间的月数(返回 Double)。 |
select months_between('2025-01-18', '2024-12-15'); — 1.09677419 |
| next_day(d, dayOfWeek) |
返回指定日期之后的第一个“星期几”。 |
select next_day('2025-07-23', 'Mon'); — 2025-07-28 |
四、属性提取与截断
| 类别 |
函数 |
说明 |
示例 |
| 字段提取 |
year(), month(), quarter(), day(), hour(), minute(), second() |
提取对应的整数部分。 |
select hour('2009-07-30 12:58:59'); — 12 |
| 星期相关 |
dayofweek() / weekday() |
dayofweek: 1=Sun, 7=Satweekday: 0=Mon, 6=Sun |
select dayofweek('2023-08-22'); — 3 |
| 年内统计 |
dayofyear() / week_of_year() |
返回一年中的第几天/第几周。 |
select dayofyear('2016-04-09'); — 100 |
| 灵活提取 |
extract(field FROM obj) |
从对象中提取 YEAR, DAY, SECOND 等字段。 |
select extract(DAY FROM '2016-04-09'); — 9 |
| 截断 |
date_trunc(fmt, ts) |
将时间戳按单位截断(如截断至月份)。 |
select date_trunc('MONTH', '2015-03-05'); — 2015-03-01 00:00:00 |
| 月末 |
last_day(d) |
返回该月最后一天的日期。 |
select last_day(DATE '2024-02-15') — 2024-02-29 |
五、格式化与转换
| 函数 |
说明 |
示例 |
| to_date(s[, fmt]) |
将字符串转为日期。 |
select to_date('2016-12-31', 'yyyy-MM-dd'); — 2016-12-31 |
| to_timestamp(s, fmt) |
将字符串转为带时区的时间戳。 |
select to_timestamp('2024-12-31', 'yyyy-MM-dd'); — 2024-12-31 00:00:00 |
| date_format(ts, fmt) |
将时间戳按格式转为字符串。 |
select date_format(now(), 'yyyy/MM/dd'); — 2026/01/01 |
| from_unixtime(sec, fmt) |
将 UNIX 秒数转为格式化字符串(受时区影响)。 |
select from_unixtime(1767239624, 'yyyy-MM-dd'); — 2026/01/01 |
| unix_date(d) |
返回自 1970-01-01 以来的天数。 |
select unix_date('1970-01-02'); — 1 |
| unix_seconds/unix_millis/unix_micros |
返回自 Epoch 以来的秒/毫秒/微秒。 |
SET TIMEZONE = 'UTC'; — 为保证样例结果稳定,先设置时区为UTCselect unix_millis('1970-01-01 00:00:01'); — 1000select unix_seconds('1970-01-01 00:00:01'); — 1select unix_micros('1970-01-01 00:00:01'); — 1000000 |
| from_utc_timestamp/to_utc_timestamp |
在指定时区与 UTC 之间转换时间戳。 |
SELECT from_utc_timestamp('2015-07-24 07:00:00', 'America/Los_Angeles'); –2015-07-24 00:00:00 |