SYSDATE 和以 MM-DD 格式存储的日期之间的日期差异
Posted
技术标签:
【中文标题】SYSDATE 和以 MM-DD 格式存储的日期之间的日期差异【英文标题】:Date Difference Between SYSDATE and Date stored in MM-DD format 【发布时间】:2014-08-23 12:26:42 【问题描述】:我正在设置一个简单的提醒系统,并使用 mysql 表来存储日期。
我需要为提醒日期存储的关键内容是月份中的某天和月份。
但是,用户必须从 DatePicker 字段中选择值,如下所示: http://www.eyecon.ro/bootstrap-datepicker/
因此,如果用户想要 9 月 2 日的提醒日期,则日期会以 YYYY-MM-DD 格式存储在数据库的“日期”字段中,即 2014-09-02。
我遇到的问题是该日期应在下个月到期。
这是我的示例表:
CREATE TABLE `test_table` (
`fldID` int(11) NOT NULL AUTO_INCREMENT,
`fldDate` date DEFAULT NULL,
`fldDateVarChar` varchar(255) DEFAULT NULL,
PRIMARY KEY (`fldID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
一些示例数据:
insert into `test_table`(`fldID`,`fldDate`,`fldDateVarChar`) values (1,'2014-08-28','08-28');
insert into `test_table`(`fldID`,`fldDate`,`fldDateVarChar`) values (2,'2016-10-09','10-09');
insert into `test_table`(`fldID`,`fldDate`,`fldDateVarChar`) values (3,'2014-01-23','01-23');
insert into `test_table`(`fldID`,`fldDate`,`fldDateVarChar`) values (4,'2015-09-18','09-18');
样本数据:
fldID fldDate fldDateVarChar
------------------------------------------
1 2014-08-28 08-28
2 2016-10-09 10-09
3 2014-01-23 01-23
4 2015-09-18 09-18
期望的输出:
fldID TODAYS_DATE CalcDate Difference
--------------------------------------------------------------------
1 2014-08-23 2014-08-28 -5
2 2014-08-23 2014-10-09 -47
3 2014-08-23 2014-01-23 212
4 2014-08-23 2014-09-18 -26
对于上述情况,第 1 行和第 4 行是相关/有用的,因为到期日期在下个月内。
用户使用日期选择器选择数据。我只对月份和日期感兴趣。年份并不重要。
我还将 MM-DD 值存储在 VARCHAR 字段中,以备不时之需。
我想制定一条 SQL 语句来计算 SYSDATE(或 NOW())与用户提醒日期的 MM-DD 部分之间的天数差异。
我不能使用例如DATEDIFF 而不将年份附加到用户的提醒日期。
例如对于“08-28”的 MM-DD 值,我需要类似:
从 DUAL 中选择 DATEDIFF(NOW(),'2014-08-28');
但如果我在几年内运行它,它需要是:
从 DUAL 中选择 DATEDIFF(NOW(),'2015-08-28');
这就是我遇到的麻烦。
我可以在 MySQL 中实现这一点吗?
【问题讨论】:
你能提供一些示例数据和你想要的输出吗?我理解这个问题,但不是你特别想得到的。 嗨 - 我已经更新了问题以包括示例表、数据和所需的输出,以防万一。 【参考方案1】:也许这对你有用:
SELECT fldID,
DATE_FORMAT(NOW(), '%Y-%m-%d') AS TODAYS_DATE,
concat(year(now()),'-',fldDateVarChar) AS CalcDate,
DATEDIFF(NOW(), concat(year(now()),'-',fldDateVarChar)) AS Difference
FROM test_table
在这里测试:http://sqlfiddle.com/#!2/098372/5/0
【讨论】:
以上是关于SYSDATE 和以 MM-DD 格式存储的日期之间的日期差异的主要内容,如果未能解决你的问题,请参考以下文章