仅在MySQL中存储日期和月份的最佳方式

时间:2016-12-28 16:20:54

标签: mysql database

所以我必须存储一年中的特定日期,任何一年。所以我只需要约会的日期和月份。

我可以在任何一年存储它,只是在编程方面忽略它但感觉很脏。有没有更好的方法来处理这个?

我能找到的最近的是this一个,但也包括时间成分,并且会有一些不同的切线。

3 个答案:

答案 0 :(得分:1)

如果您使用的是MySQL> = 5.7.6,则可以使用generated column。一个简单的示例表看起来像这样(讽刺的是,我现在无法访问最近的MySQL服务器):

CREATE TABLE myTable (
    the_date DATE,
    month_date VARCHAR(5) AS CONCAT(MONTH(the_date), '-', DAY(the_date))
);

当然,根据您的需要更改生成的值(不同的分隔符,月份填充为零等)

如果您使用旧版本,则可以使用视图执行类似的转换。

答案 1 :(得分:0)

您可以将Julian Date存储为整数,并在需要时将convert存储到格鲁吉亚月/日。这可以让事情变得非常干净。闰年让你的眼睛睁开眼睛。

这里的朱利安的概念是真的,只是“一年中的一天”,并在需要时converting

function getDateFromDay($dayOfYear, $year) {
  $date = DateTime::createFromFormat('z Y', strval($dayOfYear) . ' ' . strval($year));
  return $date;
}

答案 2 :(得分:0)

只有DATE列值有什么问题,在此示例中称为my_date

SELECT MONTH(my_date) AS myMonth, DAY(my_date) AS myDay, <othercolumns> 
FROM table WHERE id = 1 

然后,您可以使用PHP来获取行和输出$row['myMonth']等。

您还可以使用MySQL DATE_FORMAT 将任何格式字符串输出MONTH / DAY值。

如果您需要在单个列中使用这两个值,也可以CONCAT

SELECT CONCAT(MONTH(my_date),' ',DAY(my_date)) as month_day, <othercolumns> 
FROM table WHERE id = 1 

警告:

将日期存储为0000-00-00完全有效但MySQL年0000 不是闰年因此您无法存储0000-02-29,而是将其另存为默认值{ {1}}。

如果您确定永远不会使用年份值,您也可以使用闰年安全的默认年份值(例如2k年)。例如(0000-00-00)。