元芳怎么了
从你的问题来看,这不是很清楚,但如果我理解正确的话,你想要这个:SELECT *FROM tableWHERE myDate LIKE concat('%', :start_day_of_year, '%')AND myDate LIKE concat('%', :end_day_of_year, '%')$users->whereRaw($sql, [ 'start_day_of_year' => substr($fromDate, 5), 'end_day_of_year' => substr($toDate, 5), ]);
翻过高山走不出你
定义来自:用户输入至:用户输入目标:数据库字段逻辑您必须涵盖 4 种情况:逐年>变化不匹配,因为你没有覆盖一天。年复一年==。(标准)目标必须是>=“从AND” 目标必须是<=“到”。From-Year +1 <To-Year(From 相对于 To 超过 1 年)全部匹配,因为您的覆盖时间超过一年年复一年+1 ==。(从去年相对于到)至>=从匹配所有内容,因为您至少覆盖了一整年。目标>=从OR目标<=到匹配。将所有内容包裹在一起NOT(1) AND (2 OR 3 OR (4 AND (4.1 OR 4.2 )))预备课程我们将日和月转换为一个简单的数字,这样比较很容易:DATE_FORMAT('2000-01-01','%m%d')将是0101=>101建筑模块从年份开始DATE_FORMAT(?,'%Y')到年度DATE_FORMAT(?,'%Y')从DATE_FORMAT(?,'%m%d')到DATE_FORMAT(?,'%m%d')目标DATE_FORMAT(myDate,'%m%d')作为 SQL-- 1NOT( DATE_FORMAT(?,'%Y') > DATE_FORMAT(?,'%Y'))AND( -- 2 ( DATE_FORMAT(?,'%Y') = DATE_FORMAT(?,'%Y') AND DATE_FORMAT(myDate,'%m%d') >= DATE_FORMAT(?,'%m%d') AND DATE_FORMAT(myDate,'%m%d') <= DATE_FORMAT(?,'%m%d') ) OR -- 3 (DATE_FORMAT(?,'%Y')+1) < DATE_FORMAT(?,'%Y') OR ( -- 4 (DATE_FORMAT(?,'%m%d')+1) = DATE_FORMAT(?,'%m%d') AND ( -- 4.1 DATE_FORMAT(?,'%m%d') >= DATE_FORMAT(?,'%m%d') OR -- 4.2 ( DATE_FORMAT(myDate,'%m%d') >= DATE_FORMAT(?,'%m%d') OR DATE_FORMAT(myDate,'%m%d') <= DATE_FORMAT(?,'%m%d') ) ) ))参数[$frm, $to, $frm, $to, $frm, $to, $frm, $to, $frm, $to, $to, $frm, $frm, $to]您也许可以使用命名绑定。我不知道。(这将显着缩短参数)不是测试 - 调试愉快:D