SQL在同一列中使用Text和Decimal

时间:2014-02-06 22:29:52

标签: sql sql-server

我要求用DEL填写所有NULL字段。我不想修改数据库表,我只想在列上做。以下是我现在正在尝试做的事情。基本上如果值不为null,那么我想要132.00。如果它为null,那么我想看DEL。我正在研究SQL 2008 R2。感谢您的帮助,非常感谢。

当前的想法

CASE WHEN [Sales] IS NOT NULL 
     THEN CAST([Sales] AS decimal(10,0)) 
     ELSE 'DEL' 
 END AS Sales

错误

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

Warning: Null value is eliminated by an aggregate or other SET operation.

2 个答案:

答案 0 :(得分:1)

CASE WHEN [Sales] IS NOT NULL 
     THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000))
     ELSE CAST(DEL  AS NVARCHAR(1000))
 END AS Sales

在一个case语句中,返回的数据类型必须相同。

修改

如果sales为null,则返回字符串DEL

CASE WHEN [Sales] IS NOT NULL 
     THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000))
     ELSE 'DEL' 
 END AS Sales

答案 1 :(得分:1)

您不能存储在定义为包含小数的列中的“DEL”文本。这是不可能的。更重要的是,不应将列中的十进制值存储为保存字符串。换句话说,这个要求是倒退的。

您可以做的是继续存储之前的NULL和十进制数据,只返回显示的字符串数据:

CASE WHEN [sales] IS NULL THEN 'DEL' ELSE Convert(varchar(13), [sales]) END

然而,这也不是理想的,因为它会强制您的数据库执行转换工作,并且意味着您的客户端代码开始使用字符串而不是数字。这里最好的选择是让数据库继续按原样处理原始数据,并进行调整以在客户端代码中将NULL更改为“DEL”。