Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带数值搜索的SQL查询varchar字段_Sql_Dynamic_Varchar_Isnumeric - Fatal编程技术网

带数值搜索的SQL查询varchar字段

带数值搜索的SQL查询varchar字段,sql,dynamic,varchar,isnumeric,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

我创建了一个表,其中有一个名为“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
有人能帮忙吗?非常感谢

试试这个:

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
或者,这可能接近您想要的:

SELECT * 
FROM Customer
WHERE ISNUMERIC(Notes) = 1 AND
      Notes > '1200' AND Notes < '1300' and len(notes) = 4 and notes not like '%.%'

在varchar中表示数值是非常糟糕的做法。仔细想想你为什么需要它,难道你不能重复使用另一个专栏吗。
SELECT * 
FROM Customer
WHERE ISNUMERIC(Notes) = 1 AND
      Notes > '1200' AND Notes < '1300' and len(notes) = 4 and notes not like '%.%'