【发布时间】:2011-07-26 13:23:00
【问题描述】:
这是我的表结构和数据:
CREATE TABLE event (
EventID INT(11) NOT NULL AUTO_INCREMENT,
EventDate DATETIME DEFAULT NULL,
Description VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (EventID)
);
INSERT INTO event (EventID, EventDate, Description) VALUES
(1, '2011-01-01 00:00:00', 'Event 1'),
(2, '2011-03-01 00:00:00', 'Event 2'),
(3, '2011-06-01 00:00:00', 'Event 3'),
(4, '2011-09-01 00:00:00', 'Event 4');
这个查询和输出:
SELECT *
FROM EVENT
WHERE EventDate BETWEEN '2011-02-01' AND '2011-03-31'
+---------+---------------------+-------------+
| EventID | EventDate | Description |
+---------+---------------------+-------------+
| 2 | 2011-03-01 00:00:00 | Event 2 |
+---------+---------------------+-------------+
1 row in set (0.00 sec)
我想像这样在结果中注入空日期:
+---------+---------------------+-------------+
| EventID | EventDate | Description |
+---------+---------------------+-------------+
| NULL | 2011-02-01 00:00:00 | NULL |
| NULL | 2011-02-02 00:00:00 | NULL |
| NULL | 2011-02-03 00:00:00 | NULL |
∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
| NULL | 2011-02-28 00:00:00 | NULL |
| 2 | 2011-03-01 00:00:00 | Event 2 |
| NULL | 2011-03-02 00:00:00 | NULL |
∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
| NULL | 2011-03-31 00:00:00 | NULL |
+---------+---------------------+-------------+
输出应包含 59 行:2 月为 28 行,3 月为 31 行。
我想避免任何硬编码;相反,我需要一个非常灵活的解决方案来适应指定的日期。
【问题讨论】:
-
您可能希望避免“硬编码”,但有效地创建日期列表、比较、插入(甚至可能删除列表)将比尝试计算单个日期快得多。
-
@Dems:你可能是对的,我没想到
标签: mysql sql datetime date-range