Sql 的ANSI等效项为空

Sql 的ANSI等效项为空,sql,coalesce,isnull,ansi-sql,Sql,Coalesce,Isnull,Ansi Sql,我正试图找到ANSI的方法来编写T-SQL“IS NULL”。(已更正,为“空”) 互联网上的一些帖子说,你可以使用coalesce让它像‘isnull’一样工作 我喜欢这样做的原因是:可移植代码。查询必须返回NULL的行 到目前为止,我创建了以下内容: SELECT empid, firstname, lastname, country, coalesce(region,'unknown') AS regions , cit

我正试图找到ANSI的方法来编写T-SQL“IS NULL”。(已更正,为“空”) 互联网上的一些帖子说,你可以使用coalesce让它像‘isnull’一样工作

我喜欢这样做的原因是:可移植代码。查询必须返回
NULL
的行

到目前为止,我创建了以下内容:

SELECT empid,
       firstname,
       lastname,
       country,
       coalesce(region,'unknown') AS regions ,
       city
FROM HR.Employees
结果集如下所示:

empid   firstname           lastname       country  regions city
1           Sara            Davis           USA     WA      Seattle
2           Don             Funk            USA     WA      Tacoma
3           Judy            Lew             USA     WA      Kirkland 
4           Yael            Peled           USA     WA      Redmond
5           Sven            Buck            UK      unknown London
6           Paul            Suurs           UK      unknown London
7           Russell         King            UK      unknown London
8           Maria           Cameron         USA     WA      Seattle
9           Zoya            Dolgopyatova    UK      unknown London

我识别了
NULL
的行,但是如何将它们从该集中筛选出来

为空
为有效的ANSI SQL-92,称为空谓词

<null predicate> ::= <row value constructor> IS [ NOT ] NULL
::=为[非]NULL
见,第8.6段

所以
其中
列名
为空
是完全有效的


ANSI SQL处理与T-SQL不同的空值的位是当您写入
where
列名
=NULL
where
列名
NULL
时。请参阅。

这两个
都是空的
合并
都是ANSI标准,几乎在所有合理的数据库中都可用。我认为,你想要的结构是:

where region IS NULL
这是标准语法

要使
合并
为空一样工作
需要一个您知道不在数据中的值:

where coalesce(region, '<null>') <> '<null>'
联合(区域,”)的位置

但是,日期和数字需要不同的值。

您似乎混淆了
IS NULL
(检查值是否为NULL的谓词)和特定于T-SQL的函数
ISNULL(value,replace)
(后面没有空格和参数),这与
COALESCE
类似,但不完全相同

有关T-SQL的
合并
ISNULL
区别的详细信息,请参阅

一些细微的差异,如返回的类型和所有参数都为null时的情况,
ISNULL
是一个函数,如果第一个参数不为null,则返回第一个参数;如果为null,则返回第二个参数
COALESCE
返回第一个非空参数(可能需要两个以上)


因此,它们中的每一个都可能用于以不同的方式解决您的问题,并且结果略有不同。

如果有更好的过滤方法,请告诉我。因此,您希望您的查询返回除
区域
值为
未知
的行以外的所有上述行?您是否试图说
未知
?是否只希望看到空行?@chihwahli。我想你的问题的第一行是关于
is NULL
not
IN NULL
(我不熟悉)。我在网上读了几页,告诉我这不仅仅是T-SQL。但这是错误的。谢谢你的更正。我重写了我的原始代码,只是为了试用coalesce:选择empid、firstname、lastname、country、coalesce(region,'unknown')作为区域,从HR中选择city。coalesce(region,'')=''或region=N'WA'的员工现在返回空行。将对其进行存档并在将来使用“IS NULL”。再次感谢。非常感谢你指出这是ANSI,读错了页,想错了。