我创建了一个小小的SQL小提琴: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'),
所以第一项应该按降序显示。所有带结束日期的项目都应显示在(!)没有结束日期的项目之后。
任何想法如何解决?
答案 0 :(得分:2)
试试这个:
SELECT
title,
startdate,
enddate
FROM
ForgeRock
ORDER BY
CASE WHEN enddate = '0000-00-00 00:00:00' THEN 0 ELSE 1 END,
enddate DESC,
startdate DESC
这将显示所有没有结束日期的项目,然后是所有带有结束日期的项目。
答案 1 :(得分:0)
如果您没有无效日期,可以使用以下查询
SELECT
title,
startdate,
enddate
FROM
ForgeRock
order by startdate,enddate
答案 2 :(得分:0)
0000-00-00
是无效日期。
您可能需要将其更改为null
。
<强>查询强>
SELECT
title,
startdate,
enddate
FROM
ForgeRock
ORDER BY
CASE WHEN enddate = '0000-00-00 00:00:00' /* or enddate IS NULL */
THEN startdate END DESC,
enddate DESC;
答案 3 :(得分:0)
如果StartDate和End Date的数据类型是varchar,那么您可以使用以下查询 -
select * from ForgeRock
order by
Case when enddate = '0000-00-00 00:00:00'
Then '9999-12-31 00:00:00'
Else enddate END desc,
startdate desc