2009-01-06 37 views
1

存儲日期值的最佳方式是什麼?在很多情況下,只有一年可能知道日期值?在只有一年可能知道的日期存儲日期

除非啓用了NO_ZEROES_IN_DATE sql模式,MySQL默認情況下不允許使用日期部分中的零。如果月份和日期可能爲零,或者將年份,月份和日期(年份(4),tinyint,tinyint)分成3個不同的字段,是否有任何理由不使用日期字段?

+0

有時候你知道日期的其餘部分嗎?或者你只使用它來保存多年? – 2009-01-06 15:46:17

+0

是的,推測可能在某些情況下使用月份和日期 – 2009-01-06 16:20:02

回答

0

您可以在Mysql中使用單個日期字段來執行此操作。在下面的例子中,字段具有日期數據類型。

mysql> select * from test; 
+------------+------+ 
| field  | id | 
+------------+------+ 
| 2007-00-00 | 1 | 
+------------+------+ 
1 row in set (0.00 sec) 

mysql> select * from test where YEAR(field) = 2007; 
+------------+------+ 
| field  | id | 
+------------+------+ 
| 2007-00-00 | 1 | 
+------------+------+ 

我會使用一個字段,它會使查詢更容易。

是的,使用Date and Time functions會更好。 謝謝BrynJ

2

更好的辦法是將日期分成3個字段。年月日。這爲您提供了存儲,排序和搜索的完全靈活性。

此外,在必要時將字段放回到實際日期字段中非常簡單。

最後,它跨DBMS可移植。我不認爲其他人支持0作爲日期值的有效部分。

2

除非跨DBMS的可移植性很重要,否則我肯定會傾向於使用單個日期字段。如果您甚至需要適度複雜的與日期相關的查詢,那麼將日,月和年的值放在單獨的字段中將成爲一件雜事。

MySQL有豐富的日期相關函數 - http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html。如果您只想返回年份值,請使用YEAR(yourdatefield);如果您想將其包含在查詢的WHERE子句中,請使用YEAR(yourdatefield)。

0

你可以嘗試一個LIKE操作。如: SELECT * FROM table WHERE date_feield LIKE 2009;

0

這取決於你如何使用結果數據。一個簡單的答案就是簡單地存儲那些只有年份被稱爲1月1日的日期。這種方法非常簡單,並且允許您按年使用所有標準的日期函數進行彙總。

如果月份或日期顯着,則會出現問題。例如,如果您試圖在幾天,幾周,幾個月內確定記錄的年齡,或者您想要在較小的粒度級別上顯示分佈。不過,這個問題存在。如果你有一些完整的日期,有些只有一年,你想在這種情況下代表他們。

相關問題