我正在尝试这样的查询:
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)
答案 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数据类型。