Teradata SQL中如何用EXTRACT提取多时间元素及函数差异咨询
Teradata SQL中EXTRACT函数多元素提取及与YEAR/DAY函数的区别
一、EXTRACT函数无法一次提取多个日期/时间元素
Teradata SQL的EXTRACT函数不支持通过逗号分隔或and、&等运算符一次提取多个日期/时间元素,你尝试的语法不符合Teradata的规则。
要提取多个元素,必须对每个目标元素单独调用EXTRACT,示例写法如下:
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2024-06-05 00:12:48') AS minute_val, EXTRACT(SECOND FROM TIMESTAMP '2024-06-05 00:12:48') AS second_val, EXTRACT(YEAR FROM TIMESTAMP '2024-06-05 00:12:48') AS year_val, EXTRACT(DAY FROM TIMESTAMP '2024-06-05 00:12:48') AS day_val;
二、YEAR()/DAY()函数与EXTRACT的区别
1. 返回数据类型不同
YEAR()、DAY()这类函数返回INTEGER类型;EXTRACT返回NUMERIC类型(提取秒等带小数精度的元素时会保留小数位,例如提取毫秒级时间戳的秒会得到48.123这类值)。
2. 语法标准与兼容性
YEAR()、DAY()是Teradata专有函数,仅适用于Teradata环境;EXTRACT遵循ANSI SQL标准,在PostgreSQL、Oracle等多数符合标准的数据库中通用,兼容性更强。
3. 适用范围差异
YEAR()、DAY()仅支持提取基础日期/时间元素,且参数只能是日期或时间戳类型;EXTRACT支持更多元素提取(如TIMEZONE_HOUR、TIMEZONE_MINUTE等时区相关元素),还能处理INTERVAL类型的数据。
示例对比:
-- 使用YEAR()函数,返回INTEGER类型 SELECT YEAR(TIMESTAMP '2024-06-05 00:12:48') AS year_val; -- 使用EXTRACT,返回NUMERIC类型 SELECT EXTRACT(YEAR FROM TIMESTAMP '2024-06-05 00:12:48') AS year_val;
内容的提问来源于stack exchange,提问作者Linnaes
相关产品推荐
相关产品推荐

