SQL 过滤掉任何年份的特定月份、日期和时间

SQL Filter Out Specific Month, Day, and Time for Any Year

Microsoft Dynamics NAV 使用 yyyy-12-31 23:59:59.000datetime 来识别年度结算条目。我正在尝试编写一份报告,其中将包含我所有的条目,除了这些。如果我明确使用

WHERE 子句,则查询对 2014 工作正常
WHERE [Posting Date] <> '2014-12-31 23:59:59.000')

但我需要查询在任何一年都有效。我试过了:

WHERE (DATEPART(mm, [Posting Date]) <> 12) AND 
      (DATEPART(dd, [Posting Date]) <> 31) AND 
      (DATEPART(hh, [Posting Date]) <> 23) AND 
      (DATEPART(mi, [Posting Date]) <> 59) AND 
      (DATEPART(ss, [Posting Date]) <> 59)

但这过滤掉了 December 中的所有内容,或者 31 的一天或 23 的一个小时,等等...

是否有一种简单的方法来过滤给定的日期时间,但可以是任何年份?

可能是这样的:

WHERE MONTH([Posting Date]) <> 12 OR
      DAY([Posting Date]) <> 31 OR
      CAST([Posting Date] AS TIME) <> CAST('23:59:59.000' AS TIME)

更简短的回答:

WHERE YEAR([Posting Date]) <> YEAR(DATEADD(ss, 1, [Posting Date]))

另一件你也可以做的事情是这样的,它与你尝试过的略有不同。

WHERE 1 = CASE 
        WHEN (
                DATEPART(MONTH, [POSTING DATE]) = 12
                AND DATEPART(DAY, [POSTING DATE]) = 31
                AND DATEPART(HOUR, [POSTING DATE]) = 23
                AND DATEPART(MINUTE, [POSTING DATE]) = 59
                AND DATEPART(SECOND, [POSTING DATE]) = 59
                )
            THEN 0
        ELSE 1
        END

在这种情况下,我只使用 CASE 来识别日期为一年中最后一秒的那些行,其余的评估为 1/0 并过滤掉不需要的记录。