2016-11-11 202 views
0

有一個週五的時刻,試着寫MySQL的標準如下:SQL WHERE子句條件

兩個日期之間 一個時間戳此外,時間戳不超過23:59較大,如果場2爲A或B

喜歡的東西:

(`timestamp` BETWEEN @StartDate And @EndDate) AND NOT ((`timestamp`>='23:59') AND (`Field2` NOT IN ('a','b'))) 

這看起來有點假給我,並呈現出在我的編輯錯誤的性格,所以我想,以確定這種形式是錯誤的,或者如果我算錯圓括號。實際上,我在時間戳字段上執行了一些計算,但爲了簡單起見,我們忽略了這些計算。

感謝您的任何見解!

+0

從not in('a','b')中刪除'not'也timestamp> = string 23:59?一天有多少個小時?所以你排除了最後的59.9999秒? – xQbert

+0

不錯。實際上,我故意排除了最後59秒,這就是爲什麼我必須將字段a和b分開 - 在切換前的最後一分鐘,提供數據的系統不可靠。 – Jake

+0

然後,我只是認爲,根據我的理解,這不是唯一的錯誤。 – xQbert

回答

2

除了試圖避免OR索引的目的有什麼不妥之處呢?

... AND (f2 NOT IN ('a', 'b') OR ts <= '23:59')

EDIT1:(如果我沒有記錯我的布爾邏輯轉換)它相當於:

... AND NOT (f2 IN ('a', 'b') AND ts > '23:59')

EDIT2:或者,看它的另一種方式,第一版本可以擴展爲:

... AND (f2 NOT IN ('a', 'b') OR (f2 IN ('a', 'b') AND ts <= '23:59'))

+0

我需要排除a或b值大於23:59的記錄。 a或b值可能先前存在,我需要這些值。 – Jake

+0

它應該工作;它包括所有非「a或b」和任何東西(包括ts <= 23:59的「a或b」)。 _see編輯更多解釋_ – Uueerdo

+0

編輯1工作;謝謝! – Jake