所以我必须存储一年中的特定日期,任何一年。所以我只需要约会的日期和月份。
我可以在任何一年存储它,只是在编程方面忽略它但感觉很脏。有没有更好的方法来处理这个?
我能找到的最近的是this一个,但也包括时间成分,并且会有一些不同的切线。
答案 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
)。