在mysql中存储日期

时间:2011-03-28 19:05:23

标签: mysql sql date

将日期存储在三列中的mysql或仅使用一列是否更好?哪一个更快。另外,如果我只想用格式为dd / mm / yy的今天日期插入,我该怎么做。以及如何选择。另外,让我们说如果我想获得所有周三的结果,我该怎么做,或者让我们说所有月份和年份中的第25个日期,我该怎么做。

谢谢大家。

我在Apache和Mysql中使用PHP。

使用我提议的结构有什么缺点。我可以通过使用日期表轻松获得所有25日,我可以使用其他列数天来获取所有日期。我提出的解决方案与使用DATE表之间的速度方面有多大差异?

3 个答案:

答案 0 :(得分:5)

您需要使用正确的列类型,例如DATEDATETIMETIMESTAMP,具体取决于您的需求。它们专门用于处理日期,并且可以更轻松地执行难以在3个单独的列上执行的其他功能(添加,比较等)。

阅读this了解详情。

DAYOFWEEK(date)会为您提供当天的数字表示。在你的情况下,4 =星期三。 DAYOFMONTH(date)将用于查找该月的所有第25天。

DAYNAME(date)将返回日期工作日的名称

答案 1 :(得分:2)

另外,如果我只想用格式为dd / mm / yy的今天日期插入,我该怎么做。

Well it depends on the format your date is passed in through your 
form but you are going to want to store your date in YYYY-mm-dd format.

INSERT INTO my_table (timefieldname) VALUES ( '$date' );

以及如何选择。

SELECT timefieldname FROM my_table;

//or you can format the date - this will give you month/day/year 01/01/2012
SELECT DATE_FORMAT(timefieldname, '%m/%d/%Y') FROM my_table;

另外,让我们说如果我想获得所有星期三的结果,

SELECT timefieldname FROM my_table WHERE DAYNAME(timefieldname) = 'Wednesday';

我该怎么做或者说所有月份和年份中的第25个日期,我该怎么做。

SELECT timefieldname FROM my_table WHERE DAY(timefieldname) = '25'; 

答案 2 :(得分:0)

你可以自由地从你的代码库中传递日期,并让mysql为你插入它们,只要它们是时间戳:

ALTER TABLE tablename ADD `timefieldname` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

速度提升不是很大,但它确实减少了编码和验证传递给数据库的变量的需求。