请问 case when then 的判断有关问题
请教 case when then 的判断问题
尺寸 这个字段是字符型。
为什么第一条查询语句会提示“将数据类型 nvarchar 转换为 numeric 时出错”,而第二条却可以正常查询?不是已经使用when then else语句了吗?
第一条:
第二条:
望指点一下,谢谢。
------解决方案--------------------
第一句用了一个case when 导致了第一种情况下结果是numeric类型的,else情况下是varchar类型的所以不能在一列显示
第二句用了两个case when互相不影响,所以就不会报错,是在2列上显示的。
第一句改一下
尺寸 这个字段是字符型。
为什么第一条查询语句会提示“将数据类型 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