首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL在同一列中使用Text和Decimal

SQL在同一列中使用Text和Decimal
EN

Stack Overflow用户
提问于 2014-02-06 22:29:51
回答 2查看 390关注 0票数 0

我需要用DEL填写所有空字段。我不想修改数据库表,我只想在列中进行修改。下面是我现在想做的。基本上,如果这个值不是null,那么我想要132.00。如果它是空的,那么我想看到DEL。我正在研究SQL 2008 R2。谢谢你的帮助,非常感谢。

当前思想

代码语言:javascript
复制
CASE WHEN [Sales] IS NOT NULL 
     THEN CAST([Sales] AS decimal(10,0)) 
     ELSE 'DEL' 
 END AS Sales

错误

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

代码语言:javascript
复制
Warning: Null value is eliminated by an aggregate or other SET operation.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-06 22:38:56

代码语言:javascript
复制
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语句中,返回的数据类型必须是相同的。

编辑

若要返回字符串DEL (如果sales为null ),可以执行以下操作

代码语言:javascript
复制
CASE WHEN [Sales] IS NOT NULL 
     THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000))
     ELSE 'DEL' 
 END AS Sales
票数 1
EN

Stack Overflow用户

发布于 2014-02-06 22:52:42

您不能将’文本存储在定义为容纳小数的列中。只是不可能。更重要的是,您不应该将十进制值存储在定义为保存字符串的列中。换句话说,这个要求是倒退和错误的。

您可以做的是像以前一样继续存储空数据和十进制数据,并返回字符串数据以供显示:

代码语言:javascript
复制
CASE WHEN [sales] IS NULL THEN 'DEL' ELSE Convert(varchar(13), [sales]) END

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21615474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档