Where子句返回太多结果

时间:2015-08-02 08:23:44

标签: sql

我不确定为什么我的where子句不能完美运行。在脚本中,我使用where子句。

DECLARE @TABLE TABLE (myvalue VARCHAR (50))

INSERT @TABLE
    SELECT 14 UNION ALL
    SELECT 16.5 UNION ALL
    SELECT 19 UNION ALL
    SELECT 24 UNION ALL
    SELECT 26 UNION ALL
    SELECT 2 UNION ALL
    SELECT 555

SELECT DISTINCT M.myvalue 
FROM @TABLE M
WHERE 
     (M.myvalue < '6' OR M.myvalue > '28'  OR M.myvalue IS NULL)

在输出中我期待2和555,但是当我运行查询时它返回所有值:

myvalue
14.0
16.5
19.0
2.0
24.0
26.0
555.0

任何人都可以纠正我吗?

1 个答案:

答案 0 :(得分:3)

您正在将它与带有“6”和“28”

的引号的字符串进行比较

应该是:

WHERE ( 
  M.myvalue < 6 OR M.myvalue > 28  OR M.myvalue IS NULL)

另外,正如其他人指出的那样,myvalue列应该是数字,否则你要将字符串与数字进行比较。

DECLARE @TABLE TABLE (myvalue DECIMAL(10,2))