我有一个事件表,以下列方式存储日期(m / d / Y)
eventid eventstart eventend status
----------------------------------------------
1 10/9/2012 10/27/2012 Active
2 4/3/2012 4/27/2012 Active
3 10/26/2012 10/27/2012 Active
4 2/7/2012 2/9/2012 Active
5 10/30/2012 10/31/2012 Active
6 10/9/2012 10/31/2012 Active
7 11/9/2012 10/19/2012 Active
8 10/31/2012 10/18/2012 Active
如果我有输入日期,例如10/29/2012然后我想以下列方式对startdate进行排序
eventstart
----------
10/30/2012
10/31/2012
11/9/2012
10/26/2012
10/9/2012
10/9/2012
任何人都可以帮助我吗?
答案 0 :(得分:2)
您可以使用order by子句中的CASE syntax分别对两种情况进行排序:
SELECT *
FROM `events`
ORDER BY
CASE WHEN eventstart >= '2012-10-29' THEN eventstart ELSE '9999-12-31' END ASC,
CASE WHEN eventstart < '2012-10-29' THEN eventstart ELSE NULL END DESC
-- eventid | eventstart
-- --------+-----------
-- 5 | 2012-10-30
-- 8 | 2012-10-31
-- 7 | 2012-11-09
-- 3 | 2012-10-26
-- 1 | 2012-10-09
-- 6 | 2012-10-09
-- 2 | 2012-04-03
-- 4 | 2012-02-07
答案 1 :(得分:1)
以一种非常示意性的方式:
select * from tablename where eventstart >= '10/29/2012' order by eventstart asc
union
select * from tablename where eventstart < '10/29/2012' order by eventstart desc
第一行将获得未启动的事件,按升序排序,第三行将获得其余部分。
然后您应该设法真正将这些日期与SQL函数进行比较,并确定您是否希望今天包含 unstarted 事件或过去事件。我发布了第一个案例。如果您希望今天成为过去的事件,请从第一次比较中删除相等的符号并将其移至第二个符号:
select * from tablename where eventstart > '10/29/2012' order by eventstart asc
union
select * from tablename where eventstart <= '10/29/2012' order by eventstart desc
答案 2 :(得分:0)
select * from event where EXTRACT(MONTH FROM str_to_date(eventstart, '%d/%m/%Y'))>=EXTRACT(MONTH FROM str_to_date('10/29/2012', '%d/%m/%Y'))
and eventstart >'10/29/2012'
union
select * from event where EXTRACT(MONTH FROM str_to_date(eventstart, '%d/%m/%Y'))>=EXTRACT(MONTH FROM str_to_date('10/29/2012', '%d/%m/%Y'))
and eventstart <'10/29/2012'