MySQL选择两个日期之间的行,而不管年份

时间:2016-02-09 13:11:52

标签: mysql

我有一个包含两列“date_from”和“date_to”的表。当用户输入一个日期时,我想要获取那些选择日期在两者之间的行,但是那些日期的年份对我来说并不重要 - 只有几个月形成了像我这样的季节:

SELECT  `date_from` ,  `date_to`
FROM  `language_courses_accommodation_periods`
WHERE DATE_FORMAT(  `date_from` ,  '%c' ) <= DATE_FORMAT( STR_TO_DATE(  '2017-02-03',  '%Y-%m-%d' ) ,  '%c' )
AND DATE_FORMAT(  `date_to` ,  '%c' ) >= DATE_FORMAT( STR_TO_DATE(  '2017-02-03',  '%Y-%m-%d' ) ,  '%c' )
AND DATE_FORMAT(  `date_from` ,  '%e' ) <= DATE_FORMAT( STR_TO_DATE(  '2017-02-03',  '%Y-%m-%d' ) ,  '%e' )
AND DATE_FORMAT(  `date_to` ,  '%e' ) >= DATE_FORMAT( STR_TO_DATE(  '2017-02-03',  '%Y-%m-%d' ) ,  '%e' )

这在某些情况下有效,但是一个季节可以从例如11月开始  在3月结束然后我的查询doesent返回正确的结果。

2 个答案:

答案 0 :(得分:0)

更新:尝试这个查询它可能会起作用,从你创建太多可能的答案的月份中分割日期。

    SELECT  `date_from` ,  `date_to`
    FROM  `language_courses_accommodation_periods`
    WHERE DATE_FORMAT(  `date_from` ,  '%c-%d' ) <= DATE_FORMAT( STR_TO_DATE(  '2017-02-03',  '%Y-%m-%d' ) ,  '%c-%d' )
    AND DATE_FORMAT(  `date_to` ,  '%c-%d' ) >= DATE_FORMAT( STR_TO_DATE(  '2017-02-03',  '%Y-%m-%d' ) ,  '%c-%d' )

答案 1 :(得分:0)

使用BETWEEN,它不关心右边参数的顺序:

SELECT  `date_from`, `date_to`
FROM    `language_courses_accommodation_periods`
WHERE   DATE_FORMAT(STR_TO_DATE('2017-02-03', '%Y-%m-%d'), '%c')
            BETWEEN DATE_FORMAT(`date_from`, '%c')
                AND DATE_FORMAT(`date_to`,   '%c')

我认为以%e格式重复此条件还有其他任何附加价值。