sql server coalesce获取第一个不是null的日期

时间:2012-08-07 16:33:36

标签: sql-server sql-server-2008 sql-server-2005

我正在使用SQL Server 2008。 我想知道这是否是获得第一个非空日期的最佳代码:

    select actualdate = coalesce((select date1 from table1), (select date2 from table2))

2 个答案:

答案 0 :(得分:0)

您可以在此上下文中使用IsNull


如果您有多个列可获得Coalesce值,则应使用

Not Null

实施例

select ISNULL((select top 1 OBJECT_ID from sys.objects), 0)
go
select coalesce((select top 1 OBJECT_ID from sys.objects), 0)

<强> Click here to see the SQL Profiler Read


您在查询中缺少Top语句,否则您可能会遇到以下错误..

  

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,&lt;,&lt; =,&gt;,&gt; =或当子查询用作   表达。

答案 1 :(得分:0)

如果您可以使用一些常用ID加入这两个表,则可以使用以下查询。

select @actualdate = CASE WHEN t1.date1 is null then t2.date else t1.date end
from table1 t1 inner join table2 t2
on t1.id=t2.id

如果这两个表之间没有任何公共ID,那么尝试使用带有row_number()的CTE来连接2个表。