我有一个MySQL表,其中包含两个日期字段,如下所示:
uid int auto-increment
sponsor_name varchar
date_sent datetime
date_resent datetime
我们假设数据如下:
(1, 'patrick', '2014-03-01 12:30:00', '0000-00-00 00:00:00' )
(2, 'patrick', '2014-03-05 14:30:00', '2014-03-18 00:30:00' )
(3, 'patrick', '2014-03-08 16:30:00', '2014-03-24 00:00:00' )
(4, 'patrick', '2014-03-20 12:30:00', '0000-00-00 00:00:00' )
当我运行SELECT * FROM table ORDER BY date_resent DESC
时,我看到数据按预期返回,首先是行有date_resent
的行,然后是没有的行:
(3, 'patrick', '2014-03-08 16:30:00', '2014-03-24 00:00:00' )
(2, 'patrick', '2014-03-05 14:30:00', '2014-03-18 00:30:00' )
(1, 'patrick', '2014-03-01 12:30:00', '0000-00-00 00:00:00' )
(4, 'patrick', '2014-03-20 12:30:00', '0000-00-00 00:00:00' )
但我想要的是使用date_sent
和date_resent
列的某种组合,以便在date_resent
为空的情况下('000-00-00 00:00: 00')date_sent
在排序中被替换。
期望的结果是数据:
(3, 'patrick', '2014-03-08 16:30:00', '2014-03-24 00:00:00' )
(4, 'patrick', '2014-03-20 12:30:00', '0000-00-00 00:00:00' )
(2, 'patrick', '2014-03-05 14:30:00', '2014-03-18 00:30:00' )
(1, 'patrick', '2014-03-01 12:30:00', '0000-00-00 00:00:00' )
答案 0 :(得分:2)
怎么样:
SELECT * FROM table
ORDER BY IF(data_resent = '0000-00-00 00:00:00', data_sent, data_resent) DESC
或者如果data_resent
非空时总是大于data_sent
(我猜它是),那么您可以尝试以下方法:
SELECT * FROM table
ORDER BY GREATEST(data_sent, data_resent) DESC