簡體   English   中英

SQL按日期和月份選擇查詢順序

[英]SQL select query order by day and month

讓我們假裝今天是2月3日。

我有一張桌子:

CREATE TABLE devotion
(
  id serial NOT NULL,
  date timestamp without time zone
}

我有4條記錄:

id date
1  2013-01-01
2  2013-02-02
3  2013-03-03
4  2013-04-04

我想構建一個選擇查詢,該查詢將按以下順序返回所有記錄(按日期排序,但首先是即將到來的日期,傳遞日期附加到列表末尾):

id date
3  2013-03-03 (upcoming dates first)
4  2013-04-04
1  2013-01-01 (passed dates appended to the end of the list)
2  2013-02-02

所有記錄都具有相同的年份。 事實上,一年並不重要,只有日和月。 如果你能建議一個更好的結構,非常歡迎你。

order by case when date1 > now() then 0 else 1 end case, date1

將給出3,4,1,2的順序

更簡單:

ORDER BY (date1 < now()), date1

您可以按表達式的布爾值(date1 < now())排序。
FALSETRUE之前排在NULL之前。

這是另一種解決方案。 當然,上述答案已經足夠好了。 您不能假設今天是2月3日,因為我們采用的是Now() ,它表示Feb 2nd 所以我使用了演示數據2013-02-01 而這個答案主要取決於您的ID 可以說ID是順序的,日期也是如此。 任何人都可以自由評論這個邏輯的狡猾部分 ..

MYSQL演示

select id, `date`,
case when `date` > Date_Format(Now(),'%Y-%m-%d')
then id-3
else id+2 end as x
from demo
order by x asc
;

| ID |                            DATE | X |
--------------------------------------------
|  3 |    March, 03 2013 00:00:00+0000 | 0 |
|  4 |    April, 04 2013 00:00:00+0000 | 1 |
|  1 |  January, 01 2013 00:00:00+0000 | 3 |
|  2 | February, 01 2013 00:00:00+0000 | 4 |

如果您使用的是MySQL,我會說只使用RIGHT ,但以下內容應在psql上運行:

SELECT * FROM devotion ORDER BY substring(to_char( date, 'YYYY-MM-DD') from char_length(to_char( date, 'YYYY-MM-DD')) - 5)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM