SQL无法比较字符串(误报)

时间:2017-02-03 13:17:23

标签: sql sql-server string

我正在尝试这样的查询:

SELECT * 
FROM nomencla_base_Distribuye_Participantes_Escala 
WHERE practica = 'OCT' 
  AND temporal IS NULL OR temporal = 0

但它会返回不需要的值:

OCTB    3   1000.00  ....
OCTB    3   700.00   ....
OCTB    3   -1.00    ....

为什么SQL认为'OCT'等于'OCTB'?即使使用len(practica)len('OCT')也会产生不同的结果。

表格中的列是varchar(50)

4 个答案:

答案 0 :(得分:2)

SQL在OR之前计算AND,因此您的查询是有效的:

SELECT * 
from nomencla_base_Distribuye_Participantes_Escala 
WHERE (practica='OCT' AND temporal is null) or temporal=0

将返回temporal = 0的任何行,无论practica的值如何。添加括号以控制查询行为:

SELECT * 
from nomencla_base_Distribuye_Participantes_Escala 
WHERE practica='OCT' AND (temporal is null or temporal=0)

答案 1 :(得分:0)

我发现了真正的原因,我忘记了你使用( )

有效查询

SELECT * 
FROM nomencla_base_Distribuye_Participantes_Escala 
WHERE practica = 'OCT' AND (temporal IS NULL OR temporal = 0);

答案 2 :(得分:0)

下面应该按照您的预期工作,尝试一下,如果它不起作用,请告诉我。

SELECT * 
from nomencla_base_Distribuye_Participantes_Escala 
WHERE practica='OCT' AND isnull(temporal, 0) = 0

有关ISNULL()函数的更多信息,请访问: https://msdn.microsoft.com/en-us/library/ms184325.aspx

答案 3 :(得分:-2)

尝试

SELECT * FROM table_name WHERE practica like 'OCT';

这里假设为practica varchar数据类型。