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

使用CASE结合SUBSTRING查询并与数字相乘时出现SQL错误

问题分析与解决方案

原查询存在的问题

  • CASE逻辑错误:未先判断第6位字符是否为数字,直接做数值比较会导致非数字字符的判断失效;同时用数字0和字符类型的子串比较,会引发类型不匹配问题。
  • 多余拼接操作:结尾的+ substring(PostalCode,6,1)会将CASE结果与原字符拼接,导致输出偏离预期(比如预期100会变成1000)。
  • 文本不一致:预期结果是NoDigit,但原语句写的是NotDigit,两者需要统一。

修正后的SQL语句

SELECT
    LEFT(PostalCode, 2) AS area,
    CASE
        -- 优先判断第6位是否为数字
        WHEN ISNUMERIC(SUBSTRING(PostalCode, 6, 1)) = 0 THEN 'NoDigit'
        WHEN SUBSTRING(PostalCode, 6, 1) = '0' THEN '100'
        ELSE CAST((CAST(SUBSTRING(PostalCode, 6, 1) AS INT) * 100) AS VARCHAR)
    END AS [location]
FROM province_table

样本数据验证结果

对应你的测试数据,输出结果如下:

PostalCodearealocation
1K02BC191KNoDigit
1K03B0181K100
1K04B5191K500

完全匹配你给出的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:50:25