我有一个包含两列“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返回正确的结果。
答案 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
格式重复此条件还有其他任何附加价值。