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 格式存储的日期之间的日期差异的主要内容,如果未能解决你的问题,请参考以下文章

Oracle之trunc函数

Oracle sysdate 不等于存储日期 [重复]

java 获取近7天的日期 MM-dd 形式

Oracle 获取当前日期及日期格式

使用日期

oracle获取系统日期--当前时间+前一天+当前月+前一个月