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

SQL中CASE语句处理字段后转INT报1064语法错误如何解决

错误原因
  1. 语法错误核心:MySQL的CAST()函数不支持直接用INT作为转换目标类型,整数类型需要指定为SIGNED(有符号整数)或UNSIGNED(无符号整数)。
  2. 逻辑遗漏:样例数据中存在_这类既不是数字也不是%的无效值,就算修正语法,直接转换这类值时MySQL会隐式截断返回0,同时抛出数据截断警告,不符合返回NULL的预期。
正确实现代码
SELECT 
    col,
    CASE
        -- 移除%后判断内容是否为纯数字,是则转为整数,否则返回NULL
        WHEN REPLACE(col, '%', '') REGEXP '^[0-9]+$'
            THEN CAST(REPLACE(col, '%', '') AS SIGNED)
        ELSE NULL
    END AS colInt
FROM test;
执行结果

对应提供的样例数据,返回的colInt列值完全符合预期:

  • 原col值7% → 7
  • 原col值_ → NULL
  • 原col值9 → 9
  • 原col值60% → 60
补充说明
  • 如果后续需要处理带小数的百分比值,可以将正则规则调整为^[0-9]+(\\.[0-9]+)?$,同时将转换目标类型改为DECIMAL(总长度,小数位数)即可,例如DECIMAL(10,2)
  • 上述正则判断已经覆盖了空字符串、特殊符号等所有非纯数字场景,不需要额外编写空字符串判断分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:12:26