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

SQL查询varchar转numeric及后续类型转换错误如何解决?

问题根因
  • 首次报错:IIF 函数要求两个返回分支的数值类型兼容。你返回的第一个分支是数值类型的DAYSS,第二个分支是字符串类型的'Out of Stock',数据库会尝试隐式将字符串转换为数值,转换失败触发converting data type varchar to numeric报错。
  • 二次报错:ISNUMERIC() 函数的返回值只有1(可转换为数值)和0(不可转换为数值),你写的>=0判断永远为真,同时你直接用字符串类型存储的DAYSS和数值1比较时,数据库会尝试将带小数的字符串'7.350000'隐式转换为int类型,转换失败触发报错。
解决方案

核心逻辑是统一两个返回分支的类型,全部转为字符串即可,根据DAYSS的实际字段类型选择对应写法:

  1. 如果DAYSS本身是数值类型(decimal/float等),直接转换符合条件的值为字符串:
SELECT *
    , IIF(DAYSS >= 1, CAST(DAYSS AS VARCHAR(20)), 'Out of Stock') AS NEWDA
FROM TABLE3

如果数据库不支持IIF语法,可改用CASE语句改写:

SELECT *
    , CASE WHEN DAYSS >= 1 THEN CAST(DAYSS AS VARCHAR(20)) ELSE 'Out of Stock' END AS NEWDA
FROM TABLE3
  1. 如果DAYSS是字符串类型存储的数值,先转成decimal做判断再转字符串:
SELECT *
    , CASE 
        WHEN ISNUMERIC(DAYSS) = 1 AND CAST(DAYSS AS DECIMAL(18,6)) >= 1
        THEN CAST(CAST(DAYSS AS DECIMAL(18,6)) AS VARCHAR(20))
        ELSE 'Out of Stock'
      END AS NEWDA
FROM TABLE3

如果需要控制返回的小数位数、去掉末尾多余的0,可以用FORMAT、ROUND等函数对转换后的数值做格式化处理后再转字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:09:04