我正在设置一个简单的提醒系统,并使用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还没有将年份附加到用户的提醒日期。
e.g。对于MM-DD值为" 08-28"我需要类似的东西:
SELECT DATEDIFF(NOW(),' 2014-08-28')FROM DUAL;
但如果我在几年内运行它,那就需要:
SELECT DATEDIFF(NOW(),' 2015-08-28')FROM DUAL;
这就是我遇到的问题。
我能在MySQL中实现吗?
答案 0 :(得分:0)
也许这适合你:
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