我无法进行将nvarchar列转换为十进制的查询,并且只显示>的值。 90,< 90和= 90。
使用我构建的查询,起初它似乎给出了期望的结果,但事实并非如此。列(价格)具有空值和非数字值,如'red',abcde'等。此外,nvarchar列(价格)中的值具有小数点后1,2,3或更多数字,如90.0,1234.5643,34.00等。
这是我写的查询 -
select * from PriceList A1
join (
select * from priceList
where ISNUMERIC(price) <>0)
)A2
on A1.productId = A2.productId
and A1.ObjectKey=a2.ObjectKey
and CAST(A1.price as decimal(10,4)) > '90'
我得到几行返回结果,然后出现错误 -
Msg 8114,Level 16,State 5,Line 2
将数据类型nvarchar转换为数字时出错。
查询有什么问题?
编辑在下方。这工作除了=(等于)条件我得到'错误将nvarchar转换为数字'。错误是相同的= 90或= 900等。现在想知道什么是错的?!
select * from PriceList A1
join
( select * from PriceList where isnumerice(price)<>0
and price like '%[^a-zA-z]%' ) A2
on A1.productid = A2.productId and A1.ObjectKey=a2.ObjectKey
where CAST(A1.convertedvalue as decimal(20,8)) > '90'
and price like '%[^a-zA-z]%'
答案 0 :(得分:0)
在您想要进行转换时使用case语句,然后与转换后的值进行比较或算术运算:
case
when isnumeric(fieldname) = 1 then cast(fieldname as decimal(10,4))
else null end
所以:
select *
from priceList
where case
when isnumeric(fieldname) = 1 then cast(fieldname as decimal(10,4))
else null
end > 90