我有一个包含事件的表,其中一些是音乐会,其中填充了时间戳列。有些是quizes,因为它们是重复发生的事件,所以它们没有时间戳设置,但是我称之为日期和时间的其他两列。
我需要选择在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
答案 0 :(得分: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
列声明为DATETIME
或TIMESTAMP
数据类型。如果情况并非如此,那么我们希望以规范格式返回返回相同数据类型的表达式,以便正确排序。