我在where子句中看到了使用isNull函数的sql代码,类似于下面的date>isNull(date1,date2)
有人能解释一下这意味着什么吗?
非常感谢!米歇尔
发布于 2022-12-01 05:02:10
解释ISNULL函数是没有必要的,因为有很多关于它的文档,只需谷歌并阅读它们。其中一个在另一个答案中是联系在一起的。有必要--至少在我看来--必须指出,在许多情况下,使用这样的函数是不好的实践。
为什么要这样?这种功能有两大缺点:
ISNULL函数只接受一个值,如果是NULL,则应该检查和替换它。这意味着它必须是嵌套的,以防使用更多的参数。这可能会变得很难读。在我看来,这是一个多么可悲的实现。如何摆脱这些令人不快的限制?好吧,我们可以只使用COALESCE。这是SQL标准,将在每个DBMS上工作,并接受许多参数.这样我们就可以写些东西
SELECT COALESCE(column1, column2, column3,...,0) FROM yourtable;这将获得我们在其中编写的所有列的第一列的值,即NOT NULL。如果所有这些列都是NULL,则在本例中将选择零。当我们更改DBMS时,我们很可能永远不必重写它。
公平地说:有一些边缘情况,所以有时使用ISNULL方法可能更好,甚至是非常必要的。我不想给人留下这样的印象:功能根本没用。但是很多时候,人们使用它只是因为他们在某个地方看到了它,并且没有跳出框来思考。
因此,每当没有任何重要的理由需要或必须使用ISNULL时,我建议使用COALESCE。
举个例子,如果你想知道更多的话,请看一个关于差异的问题:Question on SO
发布于 2022-12-01 01:19:23
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
https://stackoverflow.com/questions/74635735
复制相似问题