MS SQL比较日期?

gra*_*ady 78 t-sql sql-server date sql-server-2008

我有2个日期(日期时间):

date1 = 2010-12-31 15:13:48.593
date2 = 2010-12-31 00:00:00.000

它在同一天,只是不同的时间.比较date1和date2使用<=因为date1时间而无效.所以date1 <= date2是错误的,但应该是真的.我可以通过查看年,月和日来比较它们,以便它们是相同的吗?它的SQL Server 2008.

谢谢 :)

Mar*_*ith 80

SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Run Code Online (Sandbox Code Playgroud)

应该做你需要的.

测试用例

WITH dates(date1, date2, date3, date4)
     AS (SELECT CAST('20101231 15:13:48.593' AS DATETIME),
                CAST('20101231 00:00:00.000' AS DATETIME),
                CAST('20101231 15:13:48.593' AS DATETIME),
                CAST('20101231 00:00:00.000' AS DATETIME))
SELECT CASE
         WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) THEN 'Y'
         ELSE 'N'
       END AS COMPARISON_WITH_CAST,
       CASE
         WHEN date3 <= date4 THEN 'Y'
         ELSE 'N'
       END AS COMPARISON_WITHOUT_CAST
FROM   dates 
Run Code Online (Sandbox Code Playgroud)

返回

COMPARISON_WITH_CAST   |  COMPARISON_WITHOUT_CAST
Y                         N
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 62

使用DATEDIFFdatepart为的函数day.

SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想测试date1<= date2那么您需要测试它DATEDIFF(day, date1, date2) >= 0,或者您可以测试DATEDIFF(day, date2, date1) <= 0.

  • +1这里最优雅的解决方案.如果需要在date1之前允许date2,我会考虑ABS或<> 0 (5认同)