2

我们有像这样的表结构

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

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

4

2 回答 2

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..
于 2012-12-24T04:02:05.970 回答
3

首先,听听@MarcB的建议。但是,如果您没有时间更改您的表,或者,您也可以使用以下查询。

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))) 
于 2012-12-24T04:08:50.983 回答