开发者

Need the more recent between two DATETIME's in SQL

I have two SQL DATETIME's that I need to compare. I need to set the value of a column to be th开发者_开发知识库e more recent date between the two. Is there a function for this?


Use a CASE statement.

UPDATE YourTable
    SET YourColumn = CASE WHEN @Date1 > @Date2 THEN @Date1 ELSE @Date2 END
    WHERE...


GREATEST would work for both numbers and dates.

update table set date_column = greatest(date1, date2); 

greatest(date1, date2) will return date2 if date2 is later than date1 and vice versa.


You can use the DATEDIFF function to compare the dates.

DECLARE @Date1 DATETIME = '1/1/2010'
DECLARE @Date2 DATETIME = '2/1/2010'

SELECT CASE WHEN DATEDIFF(DD, @Date1, @Date2) < 0 THEN @Date1 ELSE @Date2 END

and UPDATE

UPDATE MyTable
SET MyDate = CASE WHEN DATEDIFF(DD, @Date1, @Date2) < 0 THEN Date1 ELSE Date2 END
WHERE <insert your conditions>

Assuming SQL Server.


I need to set the value of a column to be the more recent date between the two.

I'd use the less than operator.

Yes, that's correct: the less than operator. No, not the greater than operator.

The reason is I find temporal data easier to read as a 'timeline' i.e. date values ascending in left-to-right order. Hence:

UPDATE YourTable
   SET your_col = CASE 
                      WHEN @Date1 < @Date2 THEN @Date2 
                      ELSE @Date1 
                   END
 WHERE ...


What I ended up doing was

CASE
    WHEN COALESCE(@Date1, '1/1/1980') > COALESCE(@Date2, '1/1/1980')
    THEN @Date1...
    ELSE @Date2...
    END     

I ended up doing this because if one of the dates was null, then the compare wouldn't work correctly. So I used COALESCE with a date in the past that I knew would be a good baseline, then did my comparison. Thanks for your help everyone!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜