找出SQL Server中n个日期列的最新日期

时间:2016-09-09 06:39:13

标签: sql sql-server

如何编写一个函数,使最新日期与SQL server

中传递给函数的日期数无关

实施例。

Greatest(date1,date2,date3,date4,date5)
Greatest(date1,date2,date3)

3 个答案:

答案 0 :(得分:0)

以下是使用Table valued constructor

的一种方法
SELECT *,
       (SELECT Max(dates)
        FROM   (VALUES (date1),
                       (date2)) tc(dates)) as Max_date
FROM   (SELECT '2015-01-01' AS date1,
               '2016-01-01' AS date2) a 

答案 1 :(得分:0)

使用样本查看此解决方案:

WITH Src AS
(
    SELECT * FROM (VALUES
    (GETDATE(), GETDATE()+1, GETDATE()-2),
    (GETDATE()-3, GETDATE()+1, GETDATE()+4)
    )T(Date1, Date2, Date3)
)
SELECT *
FROM Src
CROSS APPLY (SELECT MAX(D) FROM (VALUES (Date1), (Date2), (Date3)) T(D)) T(MaxDate)

CROSS APPLY (SELECT MAX(D) FROM (VALUES (A), (B), ..., (Z)) T(D))视为Greatest(A, B, ... Z)

答案 2 :(得分:0)

根据需要使用params创建一个函数。

MailMessage

使用。

CREATE FUNCTION Greatest
(
    @Param1 DATETIME,
    @Param2 DATETIME,
    @Param3 DATETIME,
    @Param4 DATETIME,
    @Param5 DATETIME,
    @Param6 DATETIME,
    @Param7 DATETIME,
    @Param8 DATETIME,
    @Param9 DATETIME    
)
RETURNS DATETIME
AS
BEGIN

    DECLARE @MaxDate DATETIME

    SELECT @MaxDate = MAX(dates) 
    FROM
    (
        VALUES (@Param1),
            (@Param2),
            (@Param3),
            (@Param4),
            (@Param5),
            (@Param6),
            (@Param7),
            (@Param8),
            (@Param9)
    ) t(dates)

    RETURN @MaxDate

END
GO