当前位置:  开发笔记 > 数据库 > 正文

选择两列之间的最近日期

如何解决《选择两列之间的最近日期》经验,为你挑选了3个好方法。

如果我有一个表(在其他列中)有两个DATETIME列,我如何从这两列中选择最近的日期.

例:

ID     Date1     Date2

1      1/1/2008   2/1/2008

2      2/1/2008   1/1/2008

3      1/10/2008  1/10/2008

如果我希望我的结果看起来像

ID     MostRecentDate

1      2/1/2008

2      2/1/2008

3      1/10/2008

有一种简单的方法可以做到这一点,我显然是在忽视它吗?我知道我可以做子查询和case语句,甚至可以在sql server中编写一个函数来处理它,但我脑子里已经知道有一个已经内置的max-compare类型函数,我只是忘记了.



1> Rockcoder..:

CASE是IMHO你最好的选择:

SELECT ID,
       CASE WHEN Date1 > Date2 THEN Date1
            ELSE Date2
       END AS MostRecentDate
FROM Table

如果其中一列可以为空,则只需要将其括起来COALESCE:

.. COALESCE(Date1, '1/1/1973') > COALESCE(Date2, '1/1/1973')


我认为就是这样.我几乎可以肯定已经建立了一个日期比较功能,我可以说"select ID,max(date1,date2)".

2> RedFilter..:
select ID, 
case
when Date1 > Date2 then Date1
else Date2
end as MostRecentDate
from MyTable


是的:)在这种情况下,西部最快的枪是我的,哈哈

3> Michael Hare..:

您可以将其抛入标量函数,这使得处理空值更容易一些.显然它不会比内联案例陈述更快.

ALTER FUNCTION [fnGetMaxDateTime] (
    @dtDate1        DATETIME,
    @dtDate2        DATETIME
) RETURNS DATETIME AS
BEGIN
    DECLARE @dtReturn DATETIME;

    -- If either are NULL, then return NULL as cannot be determined.
    IF (@dtDate1 IS NULL) OR (@dtDate2 IS NULL)
        SET @dtReturn = NULL;

    IF (@dtDate1 > @dtDate2)
        SET @dtReturn = @dtDate1;
    ELSE
        SET @dtReturn = @dtDate2;

    RETURN @dtReturn;
END

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有