选择两个(计算的)日期值中的较大者

时间:2018-11-28 12:18:15

标签: sql sql-server datetime

我有两个日期列POST /test/demo_form.php HTTP/1.1 Host: w3schools.com name1=value1&name2=value2 Date A

我需要选择Date BDate A + 42 Days中较大的(最近的)。

解决此问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:0)

对于最新日期,请使用MAX()来查找A + 42天,请使用DATEADD()。如果您可以提供表格结构和预期结果,我们将为您提供更好的帮助。 这是示例:

SELECT  MAX([YourDateColumn]) 
FROM    YourTable 
WHERE   [YourDateColumn] BETWEEN B AND DATEADD(DAY,42,A)

答案 1 :(得分:0)

我愿意尝试一下,希望对您有所帮助!

SELECT 
MAX([a])

FROM    
(SELECT DATEADD(DD,42,SoCreateDate) [a]
FROM UNIQUESOID
UNION ALL
SELECT SOSUBMISSIONDATE
FROM UNIQUESOID 

) [x]

仅说明此脚本的作用; 创建一个组合的数据集(使用并集),以便两个日期都在同一列中,然后我们使用SELECT (MAX)来从刚创建的数据集中选择最大值。

答案 2 :(得分:0)

您可以使用简单的CASE语句:

SELECT A, B, CASE WHEN DATEADD(DAY, 42, A) > B THEN DATEADD(DAY, 42, A) ELSE B END AS A42ORB

还有其他方式取决于SQL Server版本,例如:

SELECT A, B, CA.C
FROM t
CROSS APPLY (
    SELECT MAX(V) AS C
    FROM (VALUES
        (DATEADD(DAY, 42, A)),
        (B)
    ) AS VA(V)
) AS CA

或者:

SELECT A, B, CASE WHEN C > B THEN C ELSE B END
FROM t
CROSS APPLY (SELECT DATEADD(DAY, 42, A)) AS CA(C)

答案 3 :(得分:0)

我不确定您的问题是否被其他人很好地理解,所以让我为您提出以下解决方案:

SELECT
    IIF(DATEADD(DAY,42,t0.A) > t0.B, DATEADD(DAY,42,t0.A), t0.B) AS MaxDate
FROM
    YourTable  AS t0

警告:如果日期中可能存在NULL值,则必须在IIF中处理该情况