T-SQL中日期的最小/最大函数

AMi*_*ico 4 t-sql sql-server-2008

我创建了以下函数来确定两个日期之间的MAX日期.运行函数注释中的一个SELECT语句大约需要00.030到00.050秒.

有更好的表现和更清洁的方式吗?

/* Returns the greater of two dates.

    SELECT dbo.fnMaxDate(NULL      , NULL)
    SELECT dbo.fnMaxDate('1/1/2011', NULL)
    SELECT dbo.fnMaxDate(NULL      , '1/1/2011')
    SELECT dbo.fnMaxDate('1/1/2011', '1/1/2011')
    SELECT dbo.fnMaxDate('1/2/2011', '1/1/2011')
    SELECT dbo.fnMaxDate('1/1/2011', '1/2/2011')

*/
ALTER FUNCTION dbo.fnMaxDate 
(
    @Date1 DATETIME,
    @Date2 DATETIME
)
RETURNS datetime
AS
BEGIN

    DECLARE @Result DATETIME

    IF @Date1 IS NULL AND @Date2 IS NULL

        SET @Result = NULL;

    ELSE IF @Date1 IS NULL

        SET @Result = @Date2

    ELSE IF @Date2 IS NULL

        SET @Result = @Date1

    ELSE
        IF @Date1 >= @Date2

            SET @Result = @Date1

        ELSE

            SET @Result = @Date2

    RETURN @Result

END
Run Code Online (Sandbox Code Playgroud)

Joh*_*ick 5

ALTER FUNCTION dbo.fnMaxDate 
(
    @Date1 DATETIME,
    @Date2 DATETIME
)
RETURNS datetime
AS
BEGIN

    RETURN
        CASE
            WHEN ISNULL(@Date1, @Date2) > ISNULL(@Date2, @Date1)
            THEN ISNULL(@Date1, @Date2)
            ELSE ISNULL(@Date2, @Date1)
        END
END
Run Code Online (Sandbox Code Playgroud)