2015-02-09 28 views
0

我有一個表與事件,其中一些是音樂會,其中有時間戳列填補。一些是測驗,並且由於它們是反覆發生的事件,所以他們沒有設置時間戳,但是其他兩列我稱爲日期和時間。MySQL Order通過不同的領域,如果條件得到滿足

我需要選擇訂購此表後TIME(timestamp) asc,除了當列event_type = 'quiz',那麼它應該排列time而不是。

只需要考慮「小時:分鐘」部分,而不是一天。

我該如何去做這件事?見下文實例表:

title  event_type timestamp   day  time 
concert_1 music  2015-02-09 18:00:00 
quiz_1  quiz  0000-00-00 00:00:00 Monday 16:30 
concert_2 music  2015-02-10 19:00:00 
quiz_2  quiz  0000-00-00 00:00:00 Tuesday 14:00 

結果應該是:

title  event_type timestamp   day  time 
quiz_2  quiz  0000-00-00 00:00:00 Tuesday 14:00 
quiz_1  quiz  0000-00-00 00:00:00 Monday 16:30 
concert_1 music  2015-02-09 18:00:00 
concert_2 music  2015-02-10 19:00:00 

回答

1

使用條件表達式返回的一個或另一個。

例如:

ORDER BY IF(t.event_type='quiz',t.time,TIME(t.timestamp)) 

MySQL的IF()函數計算所述第一參數作爲布爾;如果結果爲TRUE,則返回第二個參數,否則返回第三個參數。

符合ANSI當量將是

ORDER BY CASE WHEN t.event_type = 'quiz' THEN t.time ELSE TIME(t.timestamp) END 

這假定time列被聲明爲TIME數據類型,並且timestamp列被聲明爲DATETIMETIMESTAMP數據類型。如果情況並非如此,那麼我們希望以規範格式返回返回相同數據類型的表達式,以便它們可以正確排序。

相關問題