如何在MYSQL中使用BETWEEN日期条件查询指定表的对应字段数据
解决方法
核心错误原因
SQL语法中BETWEEN要求左侧参数必须小于等于右侧参数,日期类型字段也遵循该规则。你传入的参数中:startDate = 2021-10-09大于:endDate10 = 2021-09-29,拼接后的查询条件等价于Datum >= '2021-10-09' AND Datum <= '2021-09-29',没有符合该条件的记录,因此返回空结果。
修复代码
首先校正两个日期的顺序,再执行查询:
// 校正日期顺序,保证BETWEEN左侧为较小日期、右侧为较大日期 if (strtotime($startDate) > strtotime($endDate10)) { $temp = $startDate; $startDate = $endDate10; $endDate10 = $temp; } $sqlAverage10 = "SELECT Stand FROM Aktienstand WHERE Symbol=:symbol AND Datum BETWEEN :startDate AND :endDate10"; if ($stmtAverage10 = $pdo->prepare($sqlAverage10)) { $stmtAverage10->execute(array( ':symbol' => $kurs['Symbol'], ':startDate' => $startDate, ':endDate10' => $endDate10 )); // 如需获取区间内所有符合条件的记录,将fetch替换为fetchAll $stmtAverage10New = $stmtAverage10->fetch(PDO::FETCH_ASSOC); }
其他校验点
- 确认
Aktienstand表中Datum字段的类型为DATE/DATETIME,避免字符串格式比对出现逻辑异常 - 若需要获取整个日期区间的所有
Stand值做平均值计算等操作,将fetch()方法替换为fetchAll(PDO::FETCH_ASSOC),fetch()仅会返回第一条匹配记录
内容的提问来源于stack exchange,提问作者user17230120
相关产品推荐
相关产品推荐

