2011-12-02 61 views
2

我是新来的发展。在sql中,我写了一个存储过程,它工作正常,但我只是想确保它是以正确的方式完成的。SQL NULL条件

这里我使用IF语句在SP检查表中的日期列是否为空或不是:

if ((select sdate 
     from tbla 
     where id='3') = Null) 
begin 
    some query 
end 

将这项工作的所有情况还是需要检查“”(空)也?

+0

取决于您的数据库 - 某些数据库将“空”和“NULL”等同 - 其他人不这样做。因此,为了获得您的情况的正确答案,我们需要知道您正在使用的**数据库系统**及其版本。 “SQL”就是这样 - 结构化查询语言 - 这是**不是**数据库系统..... –

+0

可能重复[在SQL中获得null == null](http://stackoverflow.com/questions/ 191640/get-null-null-in-sql) – JNK

回答

4

空和空不是一回事,所以你需要单独检查一个空字符串。您也应该使用is null而不是= null来检查列是否为空。

+0

某些数据库(如Oracle)将空和NULL视为等效,但...... –

11

在SQL中null不等于任何东西,包括其他空值。您需要使用is null而不是=操作。

3

如果你想要显示一些其他的表达式,只要有东西为空,合并可能是你想要的。

Select CASE When (null = null) Then 1 Else 0 END

结果:0

Select CASE When (null is null) Then 1 Else 0 END

结果:1个

Select null + 'soemthing'

结果:空

Select Coalesce(null, 'DefaultValueIfNull')

结果:DefaultValueIfNull

添加一个空格,姓氏只有姓氏不为空:

select FirstName + coalesce(' ' + LastName, '') From People

添加一个空格,姓氏只有姓氏不为空,以处理空姓氏:

select FirstName + coalesce(' ' + CASE LastName When '' Then null Else LastName END, '') From People