mysql:检查日期范围

时间:2012-12-24 03:58:26

标签: mysql sql

我们有像

这样的表结构
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

我希望查询从表中提供日期范围的表中获取记录。在这种情况下,手段首先记录 如何为此编写查询?

2 个答案:

答案 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)))