2014-06-09 152 views
0

我有3個表,其中有一列叫做created,類型是datetime。檢查多個列的範圍日期

我正在尋找一種方法來檢查所有日期的3個創建的列(今天和今天-7之間),如果日期被發現,結果應該是1,如果不是,0

SQL FIDDLE是我到現在爲止。它應該返回1,但它返回0,而不是。

SELECT 
    CASE 
    WHEN(
      (
      table1.created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE() AND 
      table2.created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE() AND 
      table3.created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE() 
     ) 
     ) 
    THEN 
     1 
    ELSE 
     0 
    END AS FLAG 
FROM 
    table1, 
    table2, 
    table3 
WHERE 
    table1.cond1= 'A' and 
    table2.cond1= 'A' and 
    table3.cond1= 'A' 
+0

在您的SQL小提琴鏈接中,您在第三張表中輸入的日期不在今天和最近7天之間範圍 –

回答

1

要檢查表中有一行或符合特定條件的行,你可以使用EXISTS predicate

SELECT 
    CASE 
    WHEN EXISTS (SELECT * -- syntactically, the select list is disregarded here 
          -- meaning you can replace the "*" with anything else 
       FROM tablename 
       WHERE ... 
       ) 
    THEN 1 
    ELSE 0 
    END 
-- no FROM clause in the main SELECT 
;

如果你想檢查同時幾個表,讓那幾個謂詞,像這樣:

SELECT 
    CASE 
    WHEN EXISTS (SELECT * FROM table1 WHERE ...) 
    AND EXISTS (SELECT * FROM table2 WHERE ...) 
    AND EXISTS (SELECT * FROM table3 WHERE ...) 
    THEN 1 
    ELSE 0 
    END 
;

最後,還有什麼其他應答者說也適用,也就是說,你應該考慮從

created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE() 
更改日期的檢查條件

created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE() 

原始形式將工作太你的情況,但它會依靠隱式轉換改爲datetime,這不是一個好習慣,如果將created的類型從datetime更改爲datetime2datetimeoffsetdate之一,則會中斷。

1

在SQL中,「today - 7」是DATEADD(dd, -7, GETDATE())。你有什麼,DATEDIFF(dd, 7, GETDATE())是第7天和今天之間的差異,以天測量。

+0

謝謝。試圖改變這一點,但結果仍然沒有到來。 – Khrys

3

變化DATEDIFFDATEADD7-7ANDOR

SELECT 
    CASE 
    WHEN(
      (
      table1.created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE() OR 
      table2.created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE() OR 
      table3.created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE() 
     ) 
     ) 
    THEN 
     1 
    ELSE 
     0 
    END AS FLAG 
FROM 
    table1, 
    table2, 
    table3 
WHERE 
    table1.cond1= 'A' and 
    table2.cond1= 'A' and 
    table3.cond1= 'A' 

SQLFiddle

+0

該網站現在離線。我正在測試,並沒有進入ELSE的情況下,它總是顯示NULL。 – Khrys

+0

可能是一個小提琴的錯誤......因爲我看到一切都被刪除了。在你的代碼中試一下,看看它,也是這個查詢假設所有3個表都有一個'cond1 ='A'' – georstef