日期与时间函数

最近更新时间:2026-05-06 16:28:13

我的收藏
说明:
适用版本: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=Sat

weekday: 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'; -- 为保证样例结果稳定,先设置时区为UTC
select unix_millis('1970-01-01 00:00:01'); -- 1000
select unix_seconds('1970-01-01 00:00:01'); -- 1
select 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