首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL IsNull函数

SQL IsNull函数
EN

Stack Overflow用户
提问于 2022-12-01 00:46:25
回答 2查看 36关注 0票数 0

我在where子句中看到了使用isNull函数的sql代码,类似于下面的date>isNull(date1,date2)

有人能解释一下这意味着什么吗?

非常感谢!米歇尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-12-01 05:02:10

解释ISNULL函数是没有必要的,因为有很多关于它的文档,只需谷歌并阅读它们。其中一个在另一个答案中是联系在一起的。有必要--至少在我看来--必须指出,在许多情况下,使用这样的函数是不好的实践

为什么要这样?这种功能有两大缺点:

  • 函数是一个非标准函数。这意味着它是在一些DBMS中提供的,比如Server,但在其他一些数据库中(例如Oracle DB )中却缺少它。在可能使用standard时使用非标准SQL对我来说没有任何意义。通常,人们会更改DBMS,因此每次使用非标准SQL都会导致重写这些查询或命令。
  • -- ISNULL函数只接受一个值,如果是NULL,则应该检查和替换它。这意味着它必须是嵌套的,以防使用更多的参数。这可能会变得很难读。在我看来,这是一个多么可悲的实现。

如何摆脱这些令人不快的限制?好吧,我们可以只使用COALESCE。这是SQL标准,将在每个DBMS上工作,并接受许多参数.这样我们就可以写些东西

代码语言:javascript
复制
SELECT COALESCE(column1, column2, column3,...,0) FROM yourtable;

这将获得我们在其中编写的所有列的第一列的值,即NOT NULL。如果所有这些列都是NULL,则在本例中将选择零。当我们更改DBMS时,我们很可能永远不必重写它。

公平地说:有一些边缘情况,所以有时使用ISNULL方法可能更好,甚至是非常必要的。我不想给人留下这样的印象:功能根本没用。但是很多时候,人们使用它只是因为他们在某个地方看到了它,并且没有跳出框来思考。

因此,每当没有任何重要的理由需要或必须使用ISNULL时,我建议使用COALESCE

举个例子,如果你想知道更多的话,请看一个关于差异的问题:Question on SO

票数 0
EN

Stack Overflow用户

发布于 2022-12-01 01:19:23

代码语言:javascript
复制
 declare @date1 datetime = null
 declare @date2 datetime = getdate()

 select isNull(@date1,@date2)

IsNull将返回左向右的第一个不为空的

如果@date1不是null,它将返回@date1。如果@date1为null,那么它将返回@date2 2。

关于更多的细节,文档是非常好的:

https://learn.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql?view=sql-server-ver16

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74635735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档