gpt4 book ai didi

mysql - 在忽略年份的日期范围之间选择

转载 作者:行者123 更新时间:2023-11-28 23:46:04 25 4
gpt4 key购买 nike

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

为防止混淆,我将以 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');

最佳答案

假设您有两个变量:@StartDate@EndDate。然后你可以把逻辑写成:

SELECT * 
FROM Dates
WHERE (DATE_FORMAT(@StartDate, '%m%d') <= DATE_FORMAT(@EndDate, '%m%d') AND
DATE_FORMAT(Start, '%m%d') <= DATE_FORMAT(@StartDate, '%m%d') AND
DATE_FORMAT(End, '%m%d') >= DATE_FORMAT(@EndDate, '%m%d')
) OR
(DATE_FORMAT(@StartDate, '%m%d') > DATE_FORMAT(@EndDate, '%m%d') AND
DATE_FORMAT(Start, '%m%d') > DATE_FORMAT(@StartDate, '%m%d') AND
DATE_FORMAT(End, '%m%d') < DATE_FORMAT(@EndDate, '%m%d')
);

关于mysql - 在忽略年份的日期范围之间选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com