0

日付(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

入力日がある場合(例:2012年10月29日)、開始日を次のように並べ替えます

eventstart          
----------
10/30/2012
10/31/2012 
11/9/2012
10/26/2012
10/9/2012
10/9/2012

誰か助けてもらえますか?

4

3 に答える 3

2

order by 句でCASE 構文を使用して、2 つのケースを別々に並べ替えることができます。

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
于 2012-10-30T10:11:30.073 に答える
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

最初の行は開始されていないイベントを昇順で取得し、3 行目は残りを取得します。

次に、これらの日付を SQL 関数などと実際に比較して、今日を未開始のイベントとして含めるか過去のイベントとして含めるを決定する必要があります。最初の事例を掲載しました。今日を過去の出来事にしたい場合は、最初の比較から等号を削除し、2 番目の比較に移動します。

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
于 2012-10-30T10:01:18.147 に答える
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'
于 2012-10-30T10:01:08.593 に答える