SQL 过滤掉任何年份的特定月份、日期和时间
SQL Filter Out Specific Month, Day, and Time for Any Year
Microsoft Dynamics NAV
使用 yyyy-12-31 23:59:59.000
的 datetime
来识别年度结算条目。我正在尝试编写一份报告,其中将包含我所有的条目,除了这些。如果我明确使用
的 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 并过滤掉不需要的记录。
Microsoft Dynamics NAV
使用 yyyy-12-31 23:59:59.000
的 datetime
来识别年度结算条目。我正在尝试编写一份报告,其中将包含我所有的条目,除了这些。如果我明确使用
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 并过滤掉不需要的记录。