[英]MySQL Order By different field if condition is met
我有一張桌子,上面放着一些活動,其中一些是音樂會,里面有timestamp列。 有些是測驗,由於它們是重復發生的事件,因此沒有設置時間戳,但是我稱日期和時間為另外兩列。
我需要一個選擇來在TIME(timestamp) asc
之后排序該表,除非當event_type = 'quiz'
列time
,則它應該按列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
使用條件表達式返回一個或另一個。
例如:
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
列聲明為DATETIME
或TIMESTAMP
數據類型。 如果不是這種情況,那么我們希望以規范格式返回返回相同數據類型的表達式,以便可以對其進行正確排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.