我们有像
这样的表结构id | startDay | startMonth | startYear | endDay | endMonth | endYear
1 | 22 | 12 | 2012 | 25 | 1 | 2013
现在我们有另一个日期范围,如startDate,startMonth,startYear,即 25 | 12 | 2012 和endDay,endMonth,endYear,即 10 | 1 | 2013 。
我希望查询从表中提供日期范围的表中获取记录。在这种情况下,手段首先记录
如何为此编写查询?
答案 0 :(得分:4)
抛弃此结构,并使用原生日期字段:
id start_date end_date
1 2012-12-22 2013-1-25
然后你可以使用原生的mysql日期/时间函数和比较,例如
SELECT id WHERE yourdate BETWEEN start_date AND end_date
而不是必须使用丑陋的多层次比较来正确比较这些碎片值:
SELECT id where YEAR(yourdate) < startYear OR (YEAR(yourdate) > startYear AND MONTH(yourdate) < startMOnth) etc... etc....etc..
答案 1 :(得分:3)
首先,请@ MarcB 's advice。但是,如果您没有时间更改表格,或者也可以使用以下查询。
SELECT *
FROM tableName
WHERE ('2012-12-25' BETWEEN DATE(CONCAT_WS('-', startYear, startMonth, startDay)) AND
DATE(CONCAT_WS('-', endYear, endMonth, endDay))) AND
('2013-01-10' BETWEEN DATE(CONCAT_WS('-', startYear, startMonth, startDay)) AND
DATE(CONCAT_WS('-', endYear, endMonth, endDay)))