2016-02-01 38 views
1

我剛剛接到下面的查詢才能正常工作掙扎:但是找到2個不同時間之間的時間爲

select date, time, amt, tran_id 
from trans 
where amt > 0 
     and time between'23:00:00' and '23:59:59' 
     or time between '00:00:00' and '5:59:59' 

我試圖找到通宵交易日,「或」語句拋出關閉我的其他'和'聲明和查詢返回記錄,其中amt = 0.

我確信這很簡單,我只是沒有在我的研究中運氣。

謝謝。

回答

2
where amt > 0 
    and (
      time between'23:00:00' and '23:59:59' 
    or time between '00:00:00' and '5:59:59' 
      ) 

你需要括號包含或範圍要與其他時間段只配對。

注意。如果在這段時間列具有精確細於之間第二使用會引起不準確,我總是建議使用> =連同<如本

where amt > 0 
    and (
      time >= '23:00:00' 
    or (time >= '00:00:00' and time < '6:00:00')' 
      ) 
+0

完美。謝謝! – DJDJ23

2

附加到加括號:假設time具有TIME數據類型這可以是簡化爲

select date, time, amt, tran_id 
from trans 
where amt > 0 
     and (time >= '23:00:00' or time <= '5:59:59') 

where amt > 0 
     and time not between '06:00:00' and '22:59:59' 

順便說一句,一個字面的時間應該始終寫入TIME '23:00:00'

+0

它有一個整數的數據類型,我的猜測是因爲大量的trans數據,會讓查詢更快? – DJDJ23

+1

之前有一個'TIME' /'TIMESTAMP'數據類型(幾十年前)時間被存儲爲'FLOAT'和一個特定的'FORMAT',使它看起來像一個實際的時間。當它在您的站點存儲爲「INT」時,可能由於歷史原因或節省一點空間(4對6字節)。 – dnoeth

+0

這很有道理。謝謝!! – DJDJ23

相關問題