SQL 如何使用 Case 语句仅对数值应用计算

mo_*_*aat 0 t-sql sql-server

我有存储为数字或 varchar 值的数据。

我正在执行以下操作,以便如果值是数字,我只想显示它是什么。如果值是数字,我想对其应用计算。我怎样才能做到这一点?

目前,我收到错误:

将数据类型 nvarchar 转换为数字时出错

这是我的选择语句:

select 
    case 
       when IsNumeric(value) = 1
          then cast(value as decimal(6, 2)) / coalesce(divider)
       else value 
    end as [value]
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

ISNUMERIC 众所周知,不擅长准确判断一个实际上是数字的值.....

如果无法按需要转换值,则使用TRY_CASTTRY_CONVERT- 这些函数将返回更简单NULL

SELECT
    TRY_CAST(value AS DECIMAL(6, 2)) / COALESCE(NULLIF(divider, 0))
Run Code Online (Sandbox Code Playgroud)

在官方 MS 文档站点上获取更多详细信息

此外,T-SQL 中的CASE 表达式必须为所有可能的返回返回相同的数据类型——DECIMAL在一种情况下返回 a ,而NVARCHAR在另一种情况下返回 a无论如何都不起作用......