关于coalesce和Datediff的解释(末尾带0)

问题描述 投票:0回答:2

请问有人可以解释一下这个问题吗?我不明白。

coalesce(datediff('days', start_date::date, comparative_date::date),0)

Datediff
返回两个日期之间的差异,我知道这一点。

  • 为什么是('天')而不是(天)?

  • 我的专栏和“日期”之间的(

    : :
    )有什么用?

  • “datediff”查询末尾的“0”是什么意思?

非常感谢!

sql datediff
2个回答
1
投票

根据sql文档,coalesce函数返回第一个非空值,因此在这种情况下:如果datediff返回null,则将返回传递给函数的第二个参数,即“0”

对于 datediff 函数,语法不正确。 “days”需要是“day:”,传入的“start_date”和“comparative_date”需要指向某个列值

如果对您有帮助请告诉我


0
投票

一个好的起点是清楚地了解这两个函数之间的区别:

  1. ISNULL(Column_Name, '写入您选择要返回的文本') as Derived_Column_Name 说明:如果 Column_Name 中的值存在,则显示否则将引号中的文本显示为 Derived_Column_Name

  2. COALESCE(First_Column_Value, Second_Column_Value, Third_Column_Value) 作为 Derived_Column_Name 说明:我们可以在 COALESCE 中使用多个column_name,并且任一列的值将被视为第一个值,并将在导出的_column_name 中捕获。如果 First_Column_Value 中的值存在,则显示该值,否则检查 Second_Column_Value 中的值,如果存在则显示该值,如果不存在则检查 Third_Column_Value 并显示该值。

  3. DATEDIFF(DD,First_Date_Column, Second_Date_Column) 作为 Derived_Column_Name(例如 Length_of_Stay_Days) 说明:计算 DATEDIFF() 函数中提到的两个日期列之间的差异并返回天数差异。

现在考虑这个示例查询,其中 ea 是表别名,ea.AdmissionDate 和 ea.DischargeDate 是“ea”表中的日期列。

COALESCE(DATEDIFF(DD,ea.入院日期,ea.出院日期) 类似地,如果查询中某处存在另一个自联接,并且您希望一起使用 COALESCE 和 Datediff 因为结果表中填充了 NULL 值,那么要解决此问题,您可以使用以下查询:

COALESCE(DATEDIFF(DD,ea.入院日期,ea.出院日期), DATEDIFF(DD,ep.入院日期,ep.出院日期)) AS 停留天数

其中 'ea' 和 'ep' 是同一个表的表别名,该查询将执行并获取第一部分 DATEDIFF(DD,ea.AdmissionDate,ea.DischargeDate) 的差异,如果不可用,它将计算第二部分 DATEDIFF(DD,ep.AdmissionDate,ep.DischargeDate),COALESCE 将捕获天数差异,并将该值填充到 Length_of_Stay_Days 列中。

© www.soinside.com 2019 - 2024. All rights reserved.