2011-03-20 139 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