腾讯云数据仓库 TCHouse-X TIMESTAMP/TIMESTAMPTZ

TIMESTAMPTZ(Time Stamp with Time Zone)用于存储包含日期、时间的完整数值,并能够自动处理时区转换。

相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。

注意:说明:

注意:在 TCHouse-X 中,TIMESTAMP 是 TIMESTAMPTZ 的别名。

一、核心属性

·字段构成:可拆分为年、月、日、时、分、秒。

·时区支持:包含本地时区信息。默认情况下,系统以 UTC 格式存储,但在写入、读取或与系统时间交互时,使用本地时区进行解释。

·存储精度:支持微秒(microsecond)级别。

·取值范围:0001-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999,超出此范围可能引发系统异常,请避免使用。

二、列定义

在 CREATE TABLE 语句中,以下两种写法等效:

column_name TIMESTAMPcolumn_name TIMESTAMPTZ

三、运算表达式

支持使用 INTERVAL 关键字或日期函数进行时间偏移计算:

timestamp_value [+|-] INTERVAL 'interval_expression'

·interval_expression 定义见下方 INTERVAL 表达式介绍。

四、INTERVAL 表达式

可以使用 INTERVAL 配合运算符实现灵活的时间加减。

·支持单位:YEAR[S], MONTH[S], WEEK[S], DAY[S], HOUR[S], MINUTE[S], SECOND[S]。

·限制条件:

·INTERVAL 表达式仅能指定一种单位。

·INTERVAL 数值需要为整数。

·复合运算示例:

— 通过连续计算实现任意粒度的偏移SELECT CAST('2025-01-01 01:00:00' as TIMESTAMP) + INTERVAL '3 WEEKS' – INTERVAL '1 DAY';

五、字符串解析

TCHouse-X 会自动解析符合特定格式的字符串。

·标准格式:'yyyy-MM-dd HH:mm:ss.SSSSSS'。

·弹性规则:

·可仅包含日期(如 '1966-07-30')。

·小数秒部分可省略。

·各部分数字的前导零可省略(如 '2018-1-1 1:2:3')。

·时区指定:支持带时区名的字面量,如 '2024-05-20 14:00:00 America/New_York'。

六、转换时的特殊处理

1. 空白字符:自动忽略字符串两端的空格、制表符(\\t)、换行(\\n)或回车(\\r)。

2. 分隔符:在 CAST() 显式转换中,日期与时间之间支持使用“一个或多个空格”或“字符 T”。

3. 安全性:如果字符串格式不符合要求,转换结果为 NULL 而不会触发系统报错。

4. 2038年问题:在涉及 UNIX 时间戳的函数(如 FROM_UNIXTIME)中,系统内部使用 BIGINT 处理,彻底规避了传统 32 位 INT 溢出的风险。

七、分区注意事项

TIMESTAMP 列不可以作为分区键。

八、基础转换与函数示例

— 显式转换示例SELECT CAST('1966-07-30' AS TIMESTAMP);SET TIMEZONE = 'Asia/Shanghai';SELECT CAST('2024-05-20 14:00:00 America/New_York' AS TIMESTAMP); — 返回2024-05-21 02:00:00– 将按本地时区(如 Asia/Shanghai)返回对应时间,纽约使用东部时区(ET),且2024年5月20日处于夏令时(EDT,UTC-4),– 北京时间是 UTC+8,所以纽约时间比北京时间晚12个小时– 常用日期函数SELECT HOUR('1970-01-01 15:30:00'); — 返回 15SELECT DAYOFWEEK('2004-06-13'); — 返回 1 (星期日)SELECT DATE_ADD('2004-06-13', 365); — 返回 '2005-06-13 00:00:00'SELECT DATEDIFF('1989-12-31', '1984-09-01'); — 计算间隔天数SELECT NOW(); — 返回当前本地时间

九、表操作示例

CREATE TABLE dates_and_times (t TIMESTAMP);INSERT INTO dates_and_times VALUES ('1966-07-30'), ('1985-09-25 17:45:30.005'), ('08:30:00'); SELECT * FROM dates_and_times;+————————-+| t |+————————-+| 1966-07-30 00:00:00 || 1985-09-25 17:45:30.005 || NULL |+————————-+

赞 (0)
上一篇 4天前
下一篇 4天前