我有一個存儲(除其他之外)個人出生日期的MySQL表。按截止日期對MySQL表進行排序
是否有任何方法來排序表,以便下一個應有的生日在頂部?
我有日期存儲在標準的yyyy-mm-dd日期格式和單獨的年,月和日字段,所以我可以在今年的第一個生日(ORDER BY month,day)排序它,但我不能似乎進一步得到了。
任何幫助將不勝感激。
Zagga
我有一個存儲(除其他之外)個人出生日期的MySQL表。按截止日期對MySQL表進行排序
是否有任何方法來排序表,以便下一個應有的生日在頂部?
我有日期存儲在標準的yyyy-mm-dd日期格式和單獨的年,月和日字段,所以我可以在今年的第一個生日(ORDER BY month,day)排序它,但我不能似乎進一步得到了。
任何幫助將不勝感激。
Zagga
沒有必要單獨存儲年,月,日。
而且你也不需要訂購你的表。
您只需按照您的意願訂購您的查詢。
像這樣的東西應該讓你開始:
SELECT month(t.dob) as m,
dayofmonth(t.dob) as d,
FROM mytable t
ORDER BY 1,2
Select ...
From 'Table'
Where DayOfYear(BirthDate) <= DayOfYear(CurDate())
Order By DayOfYear(BirthDate) Desc
因爲在那裏,並通過這條可能不會表現良好秩序大量使用的功能。
編輯 David Gelhar對於完整列表有正確的想法。另一種方法是:
Select ...
From 'Table'
Where DayOfYear(BirthDate) <= DayOfYear(CurDate())
Order By Case
When DayOfYear(BirthDate) <= DayOfYear(CurDate()) Then 0
Else 1
End ASC
, DayOfYear(BirthDate) DESC
同樣,不是性能最好的查詢,但它應該給你你想要的答案。
有趣的問題,因爲要做到這一點,你需要得到今年的剩餘生日,然後回到明年。喜歡的東西:
Select ...
From 'Table'
Where DayOfYear(BirthDate) >= DayOfYear(CurDate())
Order By DayOfYear(BirthDate)
union
Select ...
From 'Table'
Where DayOfYear(BirthDate) < DayOfYear(CurDate())
Order By DayOfYear(BirthDate)
編輯 想到這裏,你居然做需要使用斷開的「月」和「天」領域,而不是隻盯着DAYOFYEAR;否則如果今年是閏年而該人出生在非閏年(或反之亦然),則會得到錯誤的答案。那是因爲我們認爲我們的生日是「三月一日」,而不是「一年中的第60天」。
,當然,你不能用不同的UNION的兩個部分條款「按訂單」 ......
所以,更多的東西一樣:
Select 1,mon,day,name
From 'Table'
Where mon > Month(CurDate())
or ((mon = Month(CurDate()))
and (day >= DayOfMonth(CurDate())))
union
Select 2,mon,day,name
From 'Table'
Where mon < Month(CurDate())
or ((mon = Month(CurDate()))
and (day < DayOfMonth(CurDate())))
Order By 1,2,3