gpt4 book ai didi

MySQL 如果满足条件则按不同字段排序

转载 作者:行者123 更新时间:2023-11-29 12:25:24 27 4
gpt4 key购买 nike

我有一个包含事件的表,其中一些是音乐会,其中填充了时间戳列。有些是测验,由于它们是重复事件,因此没有设置时间戳,但我将另外两列称为“日期”和“时间”。

我需要一个选择来在 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

最佳答案

使用条件表达式返回其中之一。

例如:

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

MySQL IF() 函数将第一个参数计算为 bool 值;如果结果为 TRUE,则返回第二个参数,否则返回第三个参数。

符合 ANSI 的等效项是

ORDER BY CASE WHEN t.event_type = 'quiz' THEN t.time ELSE TIME(t.timestamp) END
<小时/>

这假设 time 列声明为 TIME 数据类型,timestamp 列声明为 DATETIMETIMESTAMP 数据类型。如果情况并非如此,那么我们希望返回以规范格式返回相同数据类型的表达式,以便可以正确对它们进行排序。

关于MySQL 如果满足条件则按不同字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28413696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com