簡體   English   中英

SQL日期范圍查詢問題

[英]SQL Date Range Query Issue

我正在編寫一個SQL查詢以根據一組條件返回匹配項,其中一個條件是根據日期范圍檢查今天的日期-存儲為兩個單獨的列“ DateFrom”和“ DateTo”

我的查詢如下:

SELECT  
    A.* 
FROM 
    A 
LEFT OUTER JOIN 
    B ON A.AlertID = B.AlertID 
WHERE
    A.AlertTypeID > 1 AND A.Active = 1 AND
    (B.Complete IS NULL OR B.Complete < 1) AND
    (A.DateFrom IS NULL OR 
    ((CONVERT(datetime, A.DateFrom, 103) <= CONVERT(datetime, GETDATE(), 103) AND 
      CONVERT(datetime, A.DateTo, 103) >= CONVERT(datetime, GETDATE(), 103))))

如果DateFrom和DateTo不同,則可以正常工作,但是我遇到的問題是我有一個條目,每個條目中的值都相同,應該將其返回,但不是。

請任何人對此提供建議。 謝謝。

好的,所以這是我自己的愚蠢錯誤,我通常將日期強制轉換為varchar,以減少時間部分,但是由於@MotoGP現在向我展示了一種更清潔的方法,對此我非常感激,我的代碼現在可以正常工作了,看起來如下:

    SELECT  
        A.* 
    FROM 
        A 
    LEFT OUTER JOIN 
        B ON A.AlertID = B.AlertID 
    WHERE
        AlertTypeID > 1 AND A.Active = 1 AND
        (B.Complete IS NULL OR B.Complete < 1) AND
        (A.DateFrom IS NULL OR 
        (CAST(A.DateFrom AS Date) >= CAST(GETDATE() AS Date) AND CAST(A.DateTo AS Date) <= CAST(GETDATE() AS Date)))

問題是CONVERT(datetime, GETDATE(), 103) ,如果運行此命令:

SELECT CONVERT(DATETIME, GETDATE(), 103)

你得到:

2016-02-24 16:19:57.840

當我猜到您只想比較值的日期部分時,您實際上想要:

2016-02-24

因此,請在轉換中使用DATE

SELECT CONVERT(DATE, GETDATE(), 103)

這只是使用此邏輯的一段代碼的快速模型,請使用您自己的數據進行測試以驗證:

CREATE TABLE #temp
    (
      id INT ,
      datefrom DATETIME ,
      dateto DATETIME
    )

INSERT  INTO #temp
        ( id, datefrom, dateto )
VALUES  ( 1, '2016-02-02', '2016-02-28' ), -- will match
        ( 2, '2016-02-27', '2016-02-28' ), -- won't match
        ( 3, '2016-02-23', '2016-02-23' ), -- yesterday no match
        ( 4, '2016-02-24', '2016-02-24' )  -- today matches

SELECT  *
FROM    #temp A
WHERE   A.datefrom IS NULL
        OR ( (CONVERT(DATE, A.datefrom, 103) <= CONVERT(DATE, GETDATE(), 103)
             AND CONVERT(DATE, A.dateto, 103) >= CONVERT(DATE, GETDATE(), 103))
           )

DROP TABLE #temp

產生:

id  datefrom                dateto
1   2016-02-02 00:00:00.000 2016-02-28 00:00:00.000
4   2016-02-24 00:00:00.000 2016-02-24 00:00:00.000

暫無
暫無

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

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