在忽略年份的日期范围之间进行选择

时间:2015-11-04 19:24:34

标签: mysql sql date select

我有一个表,它将开始日期存储在2列中,类型为Date。我需要选择在日期范围内打开的条目,但不考虑年份。

为防止混淆,我会以YYYY-MM-DDMM-DD格式写下所有日期。

这是表格的一个简单示例。

|  ID   |    Start   |     End    |
|   1   | 2014-12-01 | 2014-12-31 |
|   2   | 2015-11-18 | 2016-01-20 |
|   3   | 2015-01-01 | 2016-01-18 |
|   4   | 2015-12-10 | 2015-12-20 |

基于this post我可以查找同年的条目。例如,如果我正在查找12-1312-15之间打开的任何内容,则此查询会为我提供第1行和第4行。

SELECT * 
FROM Dates
WHERE 
    DATE_FORMAT(Start, "%m%d") <= DATE_FORMAT("2015-12-13", "%m%d") AND 
    DATE_FORMAT(End, "%m%d") >= DATE_FORMAT("2016-12-15", "%m%d") 

查找12-0101-13之间的条目不会对此有用。

有人知道我怎么能这样做吗?

修改

所以每个感兴趣的人都有测试表。

CREATE TABLE `Dates` (
  `idDates` int(11) NOT NULL AUTO_INCREMENT,
  `Start` date DEFAULT NULL,
  `End` date DEFAULT NULL,
  PRIMARY KEY (`idDates`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `Dates`
(`idDates`,
`Start`,
`End`)
VALUES
('1', '2014-12-01', '2014-12-31'),
('2', '2015-11-18', '2016-01-20'),
('3', '2015-01-01', '2016-01-18'),
('4', '2015-12-10', '2015-12-20');

1 个答案:

答案 0 :(得分:1)

我假设您有两个变量:tv_usec@StartDate。然后你可以把逻辑编写为:

@EndDate