在Mysql上保存2月30日(日期格式化)
我在保存“连续日期”时遇到问题,因为这样每个月都有30天。我需要使用日期类型(不是varchar/text/blob/etc)来保存一个元素(2014-02-30),因为在这个项目中我们需要它。是否可能?可以使用sql\u模式而不是严格模式在在Mysql上保存2月30日(日期格式化),mysql,types,crud,Mysql,Types,Crud,我在保存“连续日期”时遇到问题,因为这样每个月都有30天。我需要使用日期类型(不是varchar/text/blob/etc)来保存一个元素(2014-02-30),因为在这个项目中我们需要它。是否可能?可以使用sql\u模式而不是严格模式在日期或日期时间列中保存此类日期“值”: 允许\u无效的\u日期 不要对日期执行完全检查。只检查月份是否在 范围为1到12,日期范围为1到31。这 对于Web应用程序来说非常方便,您可以获得年、月、, 每天在三个不同的领域,你想储存什么 用户已插入(无日期验证
日期
或日期时间
列中保存此类日期“值”:
允许\u无效的\u日期
不要对日期执行完全检查。只检查月份是否在
范围为1到12,日期范围为1到31。这
对于Web应用程序来说非常方便,您可以获得年、月、,
每天在三个不同的领域,你想储存什么
用户已插入(无日期验证)。此模式适用于日期
和日期时间列。它不应用时间戳列,因为
始终需要有效的日期
因此,检查允许的可连续日期可以通过触发器完成,因为没有其他检查。我假设对于本申请,每月31日将是无效日期
例如:
CREATE TABLE example (
contable_date DATE NOT NULL
) ENGINE=INNODB;
-- set the sql_mode (here for the session)
SET @@SESSION.sql_mode = 'ALLOW_INVALID_DATES';
INSERT INTO example (contable_date) VALUES ("2014-02-30");
SELECT
DAY(contable_date) as cday,
MONTH(contable_date) as cmonth,
TIMESTAMPDIFF(DAY, contable_date, '2014-03-30') as cdiff
FROM
example;
结果:
cday cmonth cdiff
-------------------
30 2 28
使用MySQL工作台
SELECT contable_date FROM example
结果如下:
contable_date
-------------
2014-02-30
但这在sqlfiddle.com上不起作用
但我不建议这样做,特别是因为不能使用严格的SQL模式。我们也应该考虑日期和时间函数的影响。将它保存为日期,并在选择它时对其进行格式化。我不这么认为。您可能需要将其存储为一个数字。我同意@johncode,为了最大限度地利用DBMS,保存日期并将其转换为在应用程序中使用。@johncode在我所知道的任何DBMS中,都不可能将
2014-02-30
插入日期时间字段。今年2月的最后一天是28日。看看sql_模式。然后可以将这样的值存储在DATE
或DATETIME
列中,并将该值恢复为已存储的值。我可以使用该值在同一sql中保存日期并再次取消设置此选项吗?,如设置ALLOW\u INVALID\u DATES=1;'Mysql查询';设置允许\无效\日期=0;您可以这样做,选择仍然有效,请参见。即使是由订购的也会将2月30日提前到3月1日。