2011-03-20 102 views
9

當我創建一個表並在mysql中創建一個類型爲date的字段時,它將存儲日期,例如0000-00-00。是否可以將格式更改爲'd-m-Y'?MySQL日期格式

回答

12

轉到MySQL Reference - 10.5. Data Type Storage Requirements

搜索:對日期和時間類型存儲需求

,如果你選擇一個日期列的日期在內部存儲爲A three-byte integer packed as DD + MM×32 + YYYY×16×32

但是,顯示,它必須顯示在一些的方式,所以它co mes出爲0000-00-00。它是而不是存儲爲具有該特定格式的字符(10)。

如果爲了顯示而需要查看特定格式,則可以使用Date_Format()以特定格式將其轉換爲VARCHAR。但是,請記住,如果您在編程工具中使用該查詢,則這是而不是您想要執行的操作。你需要原始的日期值,出於顯示的目的,在你使用的任何編程環境中都會有類似的格式化函數。

正如你可以從DATE_FORMAT參考看看,你會希望使用'%d-%m-%Y',例如

SELECT col1, col2, DATE_FORMAT(datecolumn, '%d-%m-%Y') AS datecolumn, more1... 
FROM sometable 
.... 
2

不,它不可能保持它作爲日期字段。我建議你保持這種格式 - 所以你可以使用所有的MySQL日期函數 - 並且只有當你把它顯示給用戶時才能改變它。

您可以用查詢做應用端,或直接:

SELECT DATE_FORMAT(date_field, "%d-%m-%Y") FROM ... 
+0

我有另一種方法,我可以通過strtotime()存儲int類型的時間戳,然後它可以與date()函數一起使用。我不確定這是不錯的方法。 – 2011-03-20 09:51:10

+1

是的,但一個int時間戳是完全不可讀的。 mysql的默認格式可以讓你理解日期而不處理它。如果你使用INTs – 2011-03-20 09:52:47

5

不,這是不可能的。但是您可以使用DATE_FORMAT來選擇這種方式。

SELECT Date_format(mydatefield, '%d-%m-%Y') 
FROM table 
+0

Ouh,你也不能使用日期函數(提取日期,月份,間隔等)。我知道了。感謝所有 – 2011-03-20 09:59:30

0

爲此,您可以使用SQL

SELECT DATE_FORMAT(date_field, "%d-%m-%Y") FROM ... 

或者,如果你使用的PHP也可以達到同樣的結果:

echo date('d-m-Y', $originalDate); //You will get something like 09-08-2013 (Aug 8th, 2013) 
echo date('j-n-y', $originalDate); //You will get something like 9-8-13 (Aug 8th, 2013) 
0

我看到兩者的使用,但我發現這種佈局作爲一種參考工具更爲有用:

SELECT DATE_FORMAT('2004-01-20' ,'%Y-%m-01'); 

enter image description here