如何在MySQL數據庫中最佳地存儲年,月和日,以便按年,按年份,按年 - 月 - 日組合輕鬆檢索?如何在MySQL數據庫中最好地存儲年份,月份和日期?
回答
除非涉及時間,否則請使用DATE
數據類型。您可以使用該功能選擇日期的某些部分。
我推薦這個很明顯的:使用DATE。
它存儲沒有時間(小時 - 分鐘秒等)組件的年 - 月 - 日。
存儲爲日期並使用內置函數:day(),month()或year()來返回所需的組合。
DATE有什麼問題?只要您需要Y,Y-M或Y-M-D搜索,它們應該是可索引的。例如,DATE的問題在於,如果您希望跨越數年的所有12月份記錄。
比方說,你有一個表tbl
與DATE
類型的列d
。
在1997年的所有記錄:3月10日
SELECT * FROM tbl WHERE YEAR(d) = 1997 AND MONTH(d) = 3
SELECT * FROM tbl WHERE d BETWEEN '1997-03-01' AND '1997-03-31'
所有記錄,1997年:
SELECT * FROM tbl WHERE YEAR(d) = 1997
SELECT * FROM tbl WHERE d BETWEEN '1997-01-01' AND '1997-12-31'
在三月份的所有記錄1997年的
SELECT * FROM tbl WHERE d = '1997-03-10'
我是MySQL專家最遠的東西,但我注意到MySQL文檔建議在查詢時明確地將字符串文字轉換爲日期(_WHERE d BETWEEN CAST('1997-03-01'AS DATE)AND CAST( '1997年3月31日')_)。我認爲,否則,日期列值將轉換爲字符串以允許通配符比較,從而無法在列上使用索引。 – 2010-10-17 12:52:20
拉里,我從來沒有聽說過,但它很有意義。謝謝! – benzado 2010-10-18 06:08:48
這可能與檔案工作者使用共同日期數據類型的問題。通常情況下,您希望只能編碼年份,或只是年份和月份,具體取決於可用的信息,但您希望能夠將這些信息編碼爲一種數據類型。這是一個不適用於很多其他情況的問題。 (在回答過去的這個問題時,我曾經讓技術人員將其視爲數據問題:數據有問題!)
例如,在作曲家目錄中,您記錄了作曲家過時的事實手稿「1951年1月」。你可以在MySQL DATE字段中放置什麼來表示它? 「1951至1901年」? 「1951-01-00」?兩者都不是真的有效。通常情況下,您最終會在單獨的字段中編碼幾年,幾個月和幾天,然後必須在應用程序級別實現語義。這遠非理想。
如果你做對一個固定的日期範圍的分析考慮使用日期維度(爲表奇特的名字),並使用一個外鍵日期維度。看看這個鏈接:
http://www.ipcdesigns.com/dim_date/
如果使用此日期維認爲這將是多麼容易構造查詢反對任何你能想到的日期。
SELECT * FROM my_table
JOIN DATE_DIM date on date.PK = my_table.date_FK
WHERE date.day = 30 AND
date.month = 1 AND
date.year = 2010
或者
SELECT * FROM my_table
JOIN DATE_DIM date on date.PK = my_table.date_FK
WHERE date.day_of_week = 1 AND
date.month = 1 AND
date.year = 2010
或者
SELECT *, date.day_of_week_name FROM my_table
JOIN DATE_DIM date on date.PK = my_table.date_FK
WHERE date.is_US_civil_holiday = 1
- 1. 如何在數據庫中存儲年份月份?
- 2. mysql:按年份和月份(無日期)如何做日期
- 3. 從數據庫中選擇月份和年份的日期
- 4. 如何檢查數據庫表中日期和月份的日期和月份
- 5. mysql數據類型只存儲月份和年份
- 6. 存儲日期和月份(不含年份)
- 7. LINQ如何按日期分組日期和月份和年份
- 8. Mysql月份和年份的數據
- 9. 在MySQL數據庫中只創建月份和年份列
- 10. 計算月份和年份的日期
- 11. 月份和年份的日期轉換
- 12. JAVA如何取日期並查看日期,月份和年份?
- 13. 如何在日期欄中插入年份和月份?
- 14. 如何根據日期,月份和年份比較Cakephp中的兩個日期
- 15. 從日期生成月份和年份並自動存儲在表中
- 16. 如何確定iOS中的日期,月份和年份爲int
- 17. 如何在java中獲得給定月份和年份的最後日期
- 18. 在PHP或MySQL中排序日期(月份年份)
- 19. 提取月份和年份從MySQL日期格式
- 20. Mysql的日期的年份和月份信息
- 21. 選擇最多的日期與給定的年份和月份
- 22. SAS:找到月份和年份的最後一天的日期
- 23. 如何在jQuery UI datepicker中獲取日期,月份,年份?
- 24. 如何計算製造日期和月份之前最好的到期日期在數據庫中給出
- 25. Ember日期獲得月份,年份和日期
- 26. 日期格式爲UTC月份日期和年份(MMM DD,YYYY)
- 27. 從給定日期獲取月份,日期和年份
- 28. 如何將日期,年份和月份更新爲mysql中的現有表格
- 29. 的MySQL如何讓月份和年份中包含日期格式分離
- 30. MySQL中按年份和月份分組
這是一個模糊的和主觀的問題,但請閱讀這篇文章:HTTP://www.richardlord。net/blog/dates-in-php-and-mysql它會引導你朝着正確的方向發展! – Trufa 2010-10-17 02:16:41