VB.NET SQL查询空值

时间:2013-04-26 15:45:04

标签: sql vb.net null

所以我的查询就是这个

SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation FROM Sites WHERE OnHold<>'' or Urgent<>'' or MissingInformation<>'' or SARequired<>'' and PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived') Order By SiteNumber asc

其中PM不是空的 - 我也尝试在vb.net中将值设置为

PM<>dbnull.value 
'also tried 
PM<> is null 
'or just 
PM<> Null

他们似乎都没有遗漏空值

也让我感到困惑的是,我要求只看PM PM ='K',如上面的查询,但我看到'R'

以下是我要回来的事情

pm
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
R
NULL
NULL
NULL

是的,我故意测试PM列的'K',因为我知道我没有任何

我确定它的东西很简单,只是不能把手指放在它上面

感谢任何帮助

2 个答案:

答案 0 :(得分:3)

只需使用IS NOT NULL即可。但是查询中的问题是OR s。

格式化:

SELECT columns
FROM   sites 
WHERE  onhold <> '' 
        OR urgent <> '' 
        OR missinginformation <> '' 
        OR sarequired <> '' 
           AND pm = 'K' 
           AND pm IS NOT NULL 
           AND ( projectstatus <> 'Complete' 
                  OR projectstatus <> 'Archived' ) 
ORDER  BY sitenumber ASC 

如果您想在任何情况下排除NULLS,请将其余条件括在括号中:

SELECT columns 
FROM   sites 
WHERE  pm IS NOT NULL 
       AND ( onhold <> '' 
              OR urgent <> '' 
              OR missinginformation <> '' 
              OR sarequired <> '' 
                 AND pm = 'K' 
                 AND ( projectstatus <> 'Complete' 
                        OR projectstatus <> 'Archived' ) ) 
ORDER  BY sitenumber ASC 

编辑当我告诉它寻找K而不是R 时,我们如何修复R而不是K?

我一定忽略了这个问题。如果您只想拥有pm = 'K'的行,则根本不需要请求非空行,因为pm = 'K'隐式地不是null:

WHERE  pm = 'K' 
           AND ( onhold <> ''  ...

答案 1 :(得分:3)

您需要围绕or子句中初始where条件的括号。

SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation
FROM Sites
WHERE (OnHold<>'' or Urgent<>'' or MissingInformation<>'' or SARequired<>'') and
      PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived')
Order By SiteNumber asc

在SQL中,AND的优先级高于OR。因此,原始语句解析为:

SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation
FROM Sites
WHERE OnHold<>'' or Urgent<>'' or MissingInformation<>'' or 
      (SARequired<>'' and PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived'))
Order By SiteNumber asc