簡體   English   中英

MS SQL 比較日期?

[英]MS SQL compare dates?

我有 2 個日期(日期時間):

日期 1 = 2010-12-31 15:13:48.593
日期 2 = 2010-12-31 00:00:00.000

同一天,只是不同的時間。 由於 date1 時間,使用 <= 比較 date1 和 date2 不起作用。 所以 date1 <= date2 是錯誤的,但應該是正確的。 我可以只看年、月、日來比較它們,使它們相同嗎? 它的 SQL Server 2008。

謝謝:)

SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...

應該做你需要的。

測試用例

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 

返回

COMPARISON_WITH_CAST   |  COMPARISON_WITHOUT_CAST
Y                         N

使用DATEDIFF函數的日期部分day

SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0

請注意,如果要測試date1 <= date2則需要測試DATEDIFF(day, date1, date2) >= 0 ,或者您可以測試DATEDIFF(day, date2, date1) <= 0

簡單的一線解決方案是

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')=0

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')<=1

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')>=1

您可以嘗試使用除“dd”以外的其他選項

我總是使用DateDiff(day,date1,date2)來比較兩個日期。

結帳以下示例。 只需復制並在Ms sql server中運行即可。 此外,嘗試更改日期為31 dec至30 dec並檢查結果

BEGIN

declare @firstDate datetime
declare @secondDate datetime


declare @chkDay int

set @firstDate ='2010-12-31 15:13:48.593'
set @secondDate ='2010-12-31 00:00:00.000'

set @chkDay=Datediff(day,@firstDate ,@secondDate )

if @chkDay=0
    Begin
        Print 'Date is Same'
    end
else
    Begin
        Print 'Date is not Same'
    end
End

永遠不會太晚我在我的 SQL 中使用下面的腳本並且它對我來說工作正常

SELECT
    ID ,
    CASE
        WHEN DATEDIFF(day, ExpectedDate, ActualDate) < 0
        THEN 'Late'
        ELSE 'OnTime'
    END shipmentStatus
FROM orders
ORDER BY ExpectedDate

試試這個:

BEGIN

declare @Date1 datetime
declare @Date2 datetime

declare @chkYear int
declare @chkMonth int
declare @chkDay int
declare @chkHour int
declare @chkMinute int
declare @chkSecond int
declare @chkMiliSecond int

set @Date1='2010-12-31 15:13:48.593'
set @Date2='2010-12-31 00:00:00.000'

set @chkYear=datediff(yyyy,@Date1,@Date2)
set @chkMonth=datediff(mm,@Date1,@Date2)
set @chkDay=datediff(dd,@Date1,@Date2)
set @chkHour=datediff(hh,@Date1,@Date2)
set @chkMinute=datediff(mi,@Date1,@Date2)
set @chkSecond=datediff(ss,@Date1,@Date2)
set @chkMiliSecond=datediff(ms,@Date1,@Date2)

if @chkYear=0 AND @chkMonth=0 AND @chkDay=0 AND @chkHour=0 AND @chkMinute=0 AND @chkSecond=0 AND @chkMiliSecond=0
    Begin
        Print 'Both Date is Same'
    end
else
    Begin
        Print 'Both Date is not Same'
    end
End

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM