2011-02-24 83 views
4

在此先感謝您的任何建議或提示!SQL NOT BETWEEN查詢

我在mysql數據庫中有一張預訂表,table1。它包含開始日期和結束日期。 我有另一張表table2其中包含我需要得到的信息,但只有當某個特定日期不在任何來自table1中的任何行的日期之間。

一個例子;

select table2.testfield 
FROM table2, table1 
WHERE '2011-02-24 18:00:00' 
NOT BETWEEN table1.start 
AND table1.finish 

但是我無法讓它工作!有什麼建議麼?

+0

你會得到什麼錯誤? – 2011-02-24 15:13:03

+0

從table1到table2的鏈接在哪裏?我認爲where子句需要將table1鏈接到table2的條件,所以例如WHERE('2011-02-24 18:00:00'NOT BETWEEN table1.start AND table1.finish)AND(table1.testfield = table2.testfield ) – 2011-02-24 15:13:11

+0

我假設table2有不止一行。你想與table1.testfield比較哪一個? (很可能table1.testfield會在一些開始日期和結束日期之間,而不是其他一些開始日期和結束日期之間。) – 2011-02-24 15:13:25

回答

8

這應該工作,但看起來應該更像

select table2.testfield 
FROM table2, table1 
WHERE table1.YourField = '2011-02-24 18:00:00' 
AND 
NOT BETWEEN table1.start AND table1.finish 

這也假定您table1.starttable1.finish字段DateTime類型。如果不是,你可以嘗試鑄造領域

select table2.testfield 
    FROM table2, table1 
    WHERE table1.YourField = '2011-02-24 18:00:00' 
    AND 
    NOT BETWEEN Cast(table1.start as DateTime) AND Cast(table1.finish As DateTime) 

編輯看你的問題,我意識到,日期可能不是一個數據庫值:)所以你的方法應該工作,但您可能需要投字符串到日期時間。

+0

這就是我的日期將是一個不會存儲在數據庫中的不斷變化的變量。我的方法可行,但只適用於table1中的第一行,其中包含多個預訂條目。感謝回覆 – steve 2011-02-24 15:21:24

2

這樣的事情呢?

select table2.testfield 
FROM table2, table1 
WHERE 
    table1.start > convert(datetime,'2011-02-24 18:00:00') 
    or table1.finish < convert(datetime,'2011-02-24 18:00:00') 
+0

謝謝,但它只適用於table1中的第一行。 – steve 2011-02-24 15:16:38