【发布时间】:2016-06-09 07:58:35
【问题描述】:
我创建了一个小 SQL-fiddle:http://sqlfiddle.com/#!9/1cbee/1
我想对这些值进行排序:
INSERT INTO ForgeRock
(`id`, `title`, `startdate`, `enddate`)
VALUES
(1, 'Test 1', '2015-12-01 13:30:00', '0000-00-00 00:00:00'),
(2, 'Test 2', '2015-12-01 14:30:00', '0000-00-00 00:00:00'),
(3, 'Test 3', '2016-01-01 10:30:00', '2016-01-01 14:30:00'),
(4, 'Test 4', '2016-01-01 09:30:00', '2016-01-01 15:30:00');
使用 SQL。问题是:我想按开始日期排序 - 如果有结束日期,我想按结束日期排序。
结果应该是:
(2, 'Test 2', '2015-12-01 14:30:00', '0000-00-00 00:00:00'),
(1, 'Test 1', '2015-12-01 13:30:00', '0000-00-00 00:00:00'),
(4, 'Test 4', '2016-01-01 09:30:00', '2016-01-01 15:30:00');
(3, 'Test 3', '2016-01-01 10:30:00', '2016-01-01 14:30:00'),
所以第一个项目应该按降序显示。所有有结束日期的项目都应显示在 (!) 没有结束日期的项目之后。
任何想法如何解决这个问题?
【问题讨论】:
-
对不存在的值使用 NULL,而不是无效的日期 0000-00-00。然后你可以做
ORDER BY COALESCE(enddate, startdate) DESC。 -
您好,我使用的 CMS 默认使用
0000-00-00 00:00:00。不幸的是,我无法改变这一点。 -
希望 CMS 永远不会切换到另一个 DBMS 后端,这不是一个有效的时间戳 :-)