在Snowflake中如何将datetime类型转换为YYYYMMDD格式的INT类型
datetime转YYYYMMDD格式整数实现方案
你原始写法失效的核心原因是:将datetime字段转为DATE类型时指定的FORMAT参数仅控制查询结果的展示样式,不会修改DATE类型的内部存储结构,后续转VARCHAR时拿到的是数据库默认格式的日期字符串,并非你需要的YYYYMMDD格式,因此最终转INT会失败或结果不符合预期。
不同数据库的正确实现写法如下:
- Teradata(你原始写法的FORMAT语法符合Teradata风格)
SELECT CAST(TO_CHAR(DATETIME, 'YYYYMMDD') AS INTEGER) AS DATE_KEY FROM TBL_A;
- MySQL
SELECT CAST(DATE_FORMAT(DATETIME, '%Y%m%d') AS UNSIGNED) AS DATE_KEY FROM TBL_A;
- SQL Server
SELECT CAST(CONVERT(VARCHAR(8), DATETIME, 112) AS INT) AS DATE_KEY FROM TBL_A;
- PostgreSQL
SELECT CAST(TO_CHAR(DATETIME, 'YYYYMMDD') AS INTEGER) AS DATE_KEY FROM TBL_A;
- Oracle
SELECT TO_NUMBER(TO_CHAR(DATETIME, 'YYYYMMDD')) AS DATE_KEY FROM TBL_A;
内容的提问来源于stack exchange,提问作者lalaland
相关产品推荐
相关产品推荐

