如果SQL Server中列的值为0,请选择默认值

如果SQL Server中列的值为0,请选择默认值,sql,sql-server-2008,Sql,Sql Server 2008,如果该列的值为0,则需要使用其他select列值选择“xyz” 比如说, id col1 col2 1 0 abc 2 2 xyz 我需要选择此表中的所有列,但如果列为0,则需要显示“xyz” Select id, Case when col1 = 0 then 'xyz' else cast(col1 as varchar(10)) end as col1, col2 from table 您必须使用CASE:) 必须使用大小写:)

如果该列的值为0,则需要使用其他select列值选择“xyz”

比如说,

 id    col1   col2
 1       0     abc
 2       2     xyz
我需要选择此表中的所有列,但如果列为0,则需要显示“xyz”

Select id, Case when col1 = 0 then 'xyz' else cast(col1  as varchar(10)) end as col1, col2 from table
您必须使用CASE:)



必须使用大小写:)

col1是否必须转换为varchar?如果col1为varchar,则无需转换,否则需要转换。否决投票的原因是什么。col1是否必须转换为varchar?如果col1为varchar,则无需转换,需要else转换。否决投票的原因是什么。您假设col1在case条件中是varchar,并且在else部分对varchar进行类型转换。为什么?如果该字段不可为null,您也可以使用以下公式ISNULL(NULLIF(col1,0),'xyz')。您假定col1在case条件下为varchar,并在else部分对varchar执行类型转换。为什么?如果该字段不可为null,您也可以使用以下公式ISNULL(NULLIF(col1,0),'xyz')。您假定col1在case条件下为varchar,并在else部分对varchar执行类型转换。为什么?'xyz'是varchar,所以col1必须是varchar或转换为varchar。因为'xyz'是varchar,如果尝试在同一列上将int与varchar联接,则会失败。此外,所有内容都可以强制转换为varchar,那么问题是什么?这样,条件应该是col1=0,而不是col1='0'。不应该。Col1是整数(假设是),但结果需要强制转换为varchar,因为它将与字符串“xyz”合并。您在case条件中假设Col1是varchar,并且在else部分中对varchar执行类型转换。为什么?'xyz'是varchar,所以col1必须是varchar或转换为varchar。因为'xyz'是varchar,如果尝试在同一列上将int与varchar联接,则会失败。此外,所有内容都可以强制转换为varchar,那么问题是什么?这样,条件应该是col1=0,而不是col1='0'。不应该。Col1是整数(假设是),但结果需要强制转换为varchar,因为它将与字符串“xyz”pargan合并,Col1的日期类型是什么,integer还是varchar?pargan,Col1的日期类型是什么,integer还是varchar?
select id,
       case when col1 = '0' then 'xyz' else convert(varchar, col1) end as col1,
       col2
from table
select id,
       case 
         when col1 = 0 then 'xyz' 
         else cast(col1 as varchar(50))
       end as result_column,
       col2
from table