我有一个表存储一些事件的开始时间和结束时间。我想在这个表中搜索所有事件,甚至是在特定日期发生的事情。
这是示例数据:
ID | 开始日期 | 结束日期 | 姓名 |
---|---|---|---|
1 | 2024-04-18 13:30:45 | 2024-04-18 15:30:45 | 18-04 |
2 | 2024-04-14 13:30:45 | 2024-04-18 15:30:45 | 18-04 |
3 | 2024-04-15 13:30:45 | 2024-04-15 15:30:45 | 15-04 |
4 | 2024-04-14 13:30:45 | 2024-04-14 15:30:45 | 14-04 |
5 | 2024-04-12 13:30:45 | 2024-04-12 15:30:45 | 12-04 |
6 | 2024-03-18 13:30:45 | 2024-03-18 15:30:45 | 18-03 |
7 | 2024-03-15 13:30:45 | 2024-03-16 15:30:45 | 15-03 |
8 | 2024-03-14 13:30:45 | 2024-03-15 15:30:45 | 14-03 |
9 | 2024-03-12 13:30:45 | 2024-03-13 15:30:45 | 12-03 |
如果我想要 14/04 的数据,这是例外的输出:
ID | 开始日期 | 结束日期 | 姓名 |
---|---|---|---|
2 | 2024-04-14 13:30:45 | 2024-04-18 15:30:45 | 18-04 |
4 | 2024-04-14 13:30:45 | 2024-04-14 15:30:45 | 14-04 |
这是我的查询:
SELECT * FROM content WHERE
DATE_FORMAT(dateBegin, '%d/%m/%Y') <= '14/04/2024'
AND
DATE_FORMAT(dateEnd, '%d/%m/%Y') >= '14/04/2024'
但这是我的实际输出:
ID | 开始日期 | 结束日期 | 姓名 |
---|---|---|---|
2 | 2024-04-14 13:30:45 | 2024-04-18 15:30:45 | 18-04 |
4 | 2024-04-14 13:30:45 | 2024-04-14 15:30:45 | 14-04 |
8 | 2024-03-14 13:30:45 | 2024-03-15 15:30:45 | 14-03 |
为什么我收到的线路是正确的一天,但却是另一个月的?
我做了一个Db Fiddle来展示这个问题。
我该如何修复它?
注意:我使用的是 MariaDB 10.11.4。
尝试这个:
问题是您正在将日期时间转换为字符串。并且字符串比较的行为......不同。
字符串“14/0 3 /2024”<=“14/0 4 /2024”吗?是的。
字符串“1 5 /03/2024”>=“1 4 /04/2024”吗?是的。
(强调第一个不同的字符,它决定顺序。)