我创建了一个名为'Notes'的nvarchar字段的表,人们可以输入他们想要的任何内容(数字或文本)来帮助他们搜索。
例如
Table "Customer"
ID Name Notes
1 AAA 1234
2 BBB 1235
3 CCC 1236
4 DDD ABCD
根据这些数据,我想在1200到1300之间编写Notes的sql查询,但是不允许我这样做,因为这个字段也包含文本值。
我试过这个
SELECT *
FROM Customer
WHERE ISNUMERIC(Notes) = 1 AND Notes > 1200 AND Notes < 1300
错误:将nvarchar值转换为int
时转换失败然后我尝试了这个,虽然我会这样,但同样的错误显示
SELECT *
FROM
(SELECT *
FROM Customers
WHERE ISNUMERIC(Notes) = 1
) A
WHERE A.Notes > 1200 AND A.Notes < 1300
有人可以帮忙吗?非常感谢
答案 0 :(得分:1)
试试这个:
SELECT *
FROM Customer
WHERE (case when ISNUMERIC(Notes) = 1 then cast(Notes as float) end) > 1200 AND
(case when ISNUMERIC(Notes) = 1 then cast(Notes as float) end) < 1300
这是有效的,因为case
保证了这种情况下的评估顺序。你也可以用子查询来写这个:
select *
from (select c.*,
(case when ISNUMERIC(Notes) = 1 then cast(Notes as float) end) as NotesNum
from Customer c
) c
where NotesNum > 1200 and NotesNum < 1300;
或者,这可能接近你想要的:
SELECT *
FROM Customer
WHERE ISNUMERIC(Notes) = 1 AND
Notes > '1200' AND Notes < '1300' and len(notes) = 4 and notes not like '%.%'