日期:2014-05-18  浏览次数:20495 次

请教 case when then 的判断问题
尺寸 这个字段是字符型。
为什么第一条查询语句会提示“将数据类型 nvarchar 转换为 numeric 时出错”,而第二条却可以正常查询?不是已经使用when then else语句了吗?

第一条:
SQL code

select * from 采购单 
order by 
case when isnumeric(尺寸及要求)=1 then convert(numeric(18,5),尺寸及要求) else 尺寸及要求 end




第二条:
SQL code

select * from 采购单 
order by 
case when isnumeric(尺寸及要求)=1 then convert(numeric(18,5),尺寸及要求) end,
case when isnumeric(尺寸及要求)=0 then 尺寸及要求 end



望指点一下,谢谢。

------解决方案--------------------
第一句用了一个case when 导致了第一种情况下结果是numeric类型的,else情况下是varchar类型的所以不能在一列显示
第二句用了两个case when互相不影响,所以就不会报错,是在2列上显示的。
第一句改一下
SQL code

select * from 采购单 
order by 
case when isnumeric(尺寸及要求)=1 then CAST(convert(numeric(18,5),尺寸及要求) AS 20) else 尺寸及要求 end

------解决方案--------------------
因为 case when A else B end 

A与B的类型必须一致.

------解决方案--------------------
SQL code

order by case when isnumeric(尺寸及要求)=1 then convert(numeric(18,5),尺寸及要求) else convert(sql_variant,尺寸及要求) end