首页 > 解决方案 > SQL 如何使用 Case 语句仅对数值应用计算

问题描述

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

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

目前,我收到错误:

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

这是我的选择声明:

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

标签: sql-servertsql

解决方案


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

使用起来会简单得多TRY_CASTor -如果无法根据需要转换值,TRY_CONVERT这些函数将返回:NULL

SELECT
    TRY_CAST(value AS DECIMAL(6, 2)) / COALESCE(NULLIF(divider, 0))

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

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


推荐阅读