You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server转Snowflake查询报错:无法将'04/17/22'转换为数值

SQL Server转Snowflake查询类型转换错误修复

报错原因

你遇到的「无法将'04/17/22'转换为数值类型」错误来自两个写法问题:

  • 你的表中system_modstamp字段是MM/DD/YY格式的字符串类型(比如报错里的04/17/22),直接对字符串调用TO_VARCHAR(字段, 'YYYY-MM-DD')时,Snowflake会尝试把字符串隐式转成日期/数值类型,格式不匹配就会抛错。
  • Snowflake中+默认是数值加法运算符,你用+拼接字符串时,引擎会尝试把两边的内容转成数值再计算,进一步触发了类型转换错误。

另外你写的日期转换格式和原SQL Server的逻辑长度不匹配,就算绕过报错,后续截断字符串得到的角色值也会出错。

正确写法

对齐原SQL逻辑的兼容版

完全保留原SQL的拼接截断思路,只修复类型转换和拼接符问题:

SELECT
  user_id AS u_id,
  SUBSTR(
    MAX(
      -- 先显式把MM/DD/YY格式的字符串转日期,再转成和SQL Server 121格式一致的10位YYYY-MM-DD字符串
      TO_VARCHAR(TO_DATE(system_modstamp, 'MM/DD/YY'), 'YYYY-MM-DD')
      || -- 用||做字符串拼接,避免+触发数值转换
      CASE
        WHEN team_member_role LIKE 'AM%' OR team_member_role LIKE '%AM %' OR team_member_role LIKE 'ASR%' THEN 'AM Sales'
        WHEN team_member_role LIKE '%fsr%' THEN 'FSR'
        WHEN team_member_role LIKE '%RSD%' AND team_member_role NOT LIKE '%parts%' THEN 'AC Sales'
        WHEN team_member_role LIKE 'RSA%' THEN 'AC Sales'
        ELSE team_member_role
      END
    ),
    11, 99 -- 前10位是日期字符串,从11位开始截断就是需要的角色分组值
  ) AS team_groups,
  MAX(TO_DATE(system_modstamp, 'MM/DD/YY')) AS SYSTEM_MODSTAMP
FROM S_SFDC_ACCOUNT_TEAM
GROUP BY user_id;

如果你的system_modstamp字段本身已经是DATE/TIMESTAMP类型,直接把代码里的TO_DATE(system_modstamp, 'MM/DD/YY')替换成system_modstamp即可。

Snowflake原生优化版

原SQL的拼接截断写法是早年SQL Server没有窗口函数时的折中方案,Snowflake支持窗口函数,可以直接过滤出每个用户最新的记录,逻辑更清晰,也没有字符串截断的风险:

SELECT
  user_id AS u_id,
  CASE
    WHEN team_member_role LIKE 'AM%' OR team_member_role LIKE '%AM %' OR team_member_role LIKE 'ASR%' THEN 'AM Sales'
    WHEN team_member_role LIKE '%fsr%' THEN 'FSR'
    WHEN team_member_role LIKE '%RSD%' AND team_member_role NOT LIKE '%parts%' THEN 'AC Sales'
    WHEN team_member_role LIKE 'RSA%' THEN 'AC Sales'
    ELSE team_member_role
  END AS team_groups,
  TO_DATE(system_modstamp, 'MM/DD/YY') AS SYSTEM_MODSTAMP
FROM S_SFDC_ACCOUNT_TEAM
-- 按用户分区,按修改时间倒序,只取每个用户最新的1条记录
QUALIFY ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY TO_DATE(system_modstamp, 'MM/DD/YY') DESC) = 1;

内容的提问来源于stack exchange,提问作者ccmiller10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:15:48