如何在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