【发布时间】:2015-08-27 09:18:21
【问题描述】:
我在进行将 nvarchar 列转换为十进制并仅显示 > 90、
使用我构建的查询,起初它似乎给出了预期的结果,但事实并非如此。列(价格)同时具有 null 值 和 非数字 值,例如 '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'
我得到几行返回结果,然后出现错误 -
消息 8114,第 16 级,状态 5,第 2 行
将数据类型 nvarchar 转换为数值时出错。
查询有什么问题?
在下方编辑。除了 =(equal to) 条件我得到“将 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]%'
【问题讨论】:
-
错误告诉你......你不能将
red和abcde之类的值转换为数值,因为没有数值。 -
内部查询
where子句必须在外部查询where子句之前执行。 -
@Matt Indianso 我在外部查询中包含了 where 子句以过滤掉非数字。查询现在如下 - select * from PriceList A1 join ( select * from PriceList where isnumerice(price)0 and price like '%[^a-zA-z]%' ) A2 on A1.productid = A2。 productId 和 A1.ObjectKey=a2.ObjectKey where CAST(A1.convertedvalue as decimal(20,8)) > '90' and price like '%[^a-zA-z]%' 但是当我想要 values ='90 ' 我得到 ' 将 nvarchar 转换为非数字时出错。可能是什么问题?
标签: sql sql-server sql-server-2008