Sql 的ANSI等效项为空
我正试图找到ANSI的方法来编写T-SQL“IS NULL”。(已更正,为“空”) 互联网上的一些帖子说,你可以使用coalesce让它像‘isnull’一样工作 我喜欢这样做的原因是:可移植代码。查询必须返回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
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
notIN NULL
(我不熟悉)。我在网上读了几页,告诉我这不仅仅是T-SQL。但这是错误的。谢谢你的更正。我重写了我的原始代码,只是为了试用coalesce:选择empid、firstname、lastname、country、coalesce(region,'unknown')作为区域,从HR中选择city。coalesce(region,'')=''或region=N'WA'的员工现在返回空行。将对其进行存档并在将来使用“IS NULL”。再次感谢。非常感谢你指出这是ANSI,读错了页,想错了。