带有数字搜索的SQL Query varchar字段

时间:2014-01-28 01:51:13

标签: sql dynamic varchar isnumeric

我创建了一个名为'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

有人可以帮忙吗?非常感谢

1 个答案:

答案 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 '%.%'