Sql server SQL Server Management Studio十进制列,值为空

Sql server SQL Server Management Studio十进制列,值为空,sql-server,decimalformat,Sql Server,Decimalformat,我将这两列定义为decimal(16,2) 我想在其中保留值“”(空白) 当我将select查询设置为 CASE WHEN FIELD1 IS NULL THEN '' ELSE FIELD1 END AS FIELD_NAME 由于列的性质,这是不允许的 你能帮我在这个栏里怎么填空白值吗 非常感谢您需要将值保留为NULL,这是推荐的解决方案,或者将所有内容转换为文本。出现错误的原因是无法在同一列中返回十进制数和文本值('是文本值) 将所有内容转换为文本并插入空白值,请使用以下

我将这两列定义为
decimal(16,2)

我想在其中保留值“”(空白)

当我将select查询设置为

CASE 
   WHEN FIELD1 IS NULL THEN ''
   ELSE FIELD1 
END AS FIELD_NAME
由于列的性质,这是不允许的

你能帮我在这个栏里怎么填空白值吗


非常感谢

您需要将值保留为
NULL
,这是推荐的解决方案,或者将所有内容转换为文本。出现错误的原因是无法在同一列中返回十进制数和文本值(
'
是文本值)

将所有内容转换为文本并插入空白值,请使用以下内容:

SELECT ISNULL(CONVERT(VARCHAR(20), Field1), '')
FROM myTable

我同意您的意见,但如果您必须使用SQL,您可以按照下面的代码在case语句中使用cast。不过,在前端处理得更好,因为下面的代码意味着您的最终选择将返回一个varchar而不是十进制。处理前端,您可以从SQL返回一个十进制数,如果为空,则显示为空

create table #temp (thing decimal(16,2))
insert into  #temp (thing) values(NULL)

select 
case when thing IS NULL then '' 
else cast(thing as varchar(5)) end
from #temp

为什么要保持它为空?它非常适合这种情况。你能做的最糟糕的事情就是更改它
varchar()。如果不想返回null,那么只需将值为null的空白值返回给应用程序即可。或者在应用程序本身中处理这个问题。正如您所发现的,除非您更改数据类型,否则无法处理这个问题。老实说,这种事情应该在前端处理,而不是在sql server中。NULL是从sql中为此返回的正确值。