MSSQL日期差转天/小时/分钟代码迁移至Snowflake实现求助
正确Snowflake实现代码
以下代码完全对齐原MSSQL的计算逻辑,可直接使用:
TO_VARCHAR(DATEDIFF(second, A.Date_Time, CURRENT_TIMESTAMP()) / 86400) || 'Days ' || TO_VARCHAR(MOD(DATEDIFF(second, A.Date_Time, CURRENT_TIMESTAMP()), 86400) / 3600) || 'Hours ' || TO_VARCHAR(MOD(MOD(DATEDIFF(second, A.Date_Time, CURRENT_TIMESTAMP()), 86400), 3600) / 60) || 'Mins' AS "Waiting Pending Time"
代码适配要点
- 数值转字符串:Snowflake 可直接用
TO_VARCHAR()完成转换,如需限制长度可调整为TO_VARCHAR(xxx, 10)对齐原MSSQL的varchar(10)要求 - 取模运算:替换MSSQL的
%运算符为Snowflake兼容的MOD()函数 - 字符串拼接:Snowflake 不支持
+做字符串拼接,改用||运算符完成多段内容拼接 - 别名设置:带空格的别名需要用双引号包裹,匹配你要求的
[Waiting Pending Time]别名 - 笔误修正:删除了原MSSQL代码中误写的多层
A.字段引用,统一使用A.Date_Time
原测试代码问题说明
你之前编写的测试代码存在两处核心错误:
- 转换函数混用:
CONVERT和TO_VARCHAR用法错误,Snowflake中CONVERT语法为CONVERT(目标类型, 待转换值),不需要嵌套TO_VARCHAR使用 - 拼接逻辑错误:不能直接用
+拼接数值和字符串,也不需要给'Days'额外加两层引号
内容的提问来源于stack exchange,提问作者alphasqrd
相关产品推荐
相关产品推荐

