SYSDATE和以MM-DD格式存储的日期之间的日期差异

时间:2014-08-23 12:26:42

标签: mysql sql date

我正在设置一个简单的提醒系统,并使用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中实现吗?

1 个答案:

答案 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

在此测试:http://sqlfiddle.com/#!2/098372/5/0