如何使用 PHP 查询获取结果之间的日期 [重复]

Posted

技术标签:

【中文标题】如何使用 PHP 查询获取结果之间的日期 [重复]【英文标题】:how to fetch dates between result using PHP query [duplicate] 【发布时间】:2017-05-03 00:11:36 【问题描述】:

我正在尝试根据用户输入的月份和年份以及表名从数据库中获取一些数据。

从月份和年份我计算 from_date 和 to_date 但是如果我将日期放在 $from_date 和 $todate 之间,则查询不起作用。

$tableName = $_REQUEST['tableName'];
$month = $_REQUEST['monthName'];
$year = $_REQUEST['yearName'];
// echo json_encode($tableName);
$tableName = json_encode($tableName);
//echo $tableName;

$from_date = date('Y-m-d',strtotime($year."-".$month."-01"));
//echo json_encode($from_date);
//$to_date = date('Y-m-d',strtotime($year."-".$month."-01"));
$to_date = date('Y-m-t', strtotime($from_date));
//echo json_encode($to_date);

$conn = new PDO("sqlite:../../assets/rule_data.db");
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        //$sqlQuery = "select * from $tableName WHERE date >= '".$from_date."' AND date <= '".$to_date."' ";
        //$sqlQuery = "SELECT * FROM $tableName WHERE v_cr_sysdate >= '".$from_date."'  AND  v_cr_sysdate <= '".$to_date."' ";
        //$sqlQuery = "SELECT * FROM $tableName";
        //$sqlQuery = "select * from $tableName WHERE date >= '".convert('$from_date','%d-%m-%y')."' AND date <= '".date($to_date)."' ";
        $sqlQuery = "select * from $tableName WHERE date between '". date('Y-m-d', strtotime($from_date))."' ";
        $sqlQuery .= " AND date <='". date('Y-m-d', strtotime($to_date))."' ";
        $query = $conn->query($sqlQuery);       
        echo json_encode($query);
        echo json_encode(["riskModules"=>$query->fetchAll(PDO::FETCH_ASSOC)]);

如果我删除 AND 条件并仅保留日期 >= '$from_date' 它会起作用,但不适用于从日期到日期的日期范围。

请帮助我在对 where 子句进行 AND 查询时出错的地方。

【问题讨论】:

语法是date BETWEEN 'first-date' AND 'second-date',而不是date BETWEEN 'first-date' AND date &lt;= 'second-date' ^ 正确。之间从句的语法是错误的。 你把它和替代品date &gt;= 'first-date' AND 'date &lt;= 'second-date'混在一起了 $sqlQuery = "select * from $tableName WHERE date between '$from_date' AND '$to_date' "; $query = $conn->query($sqlQuery);回声 json_encode($query); echo json_encode(["riskModules"=>$query->fetchAll(PDO::FETCH_ASSOC)]); 我更改了查询,但基于 echo 语句,我可以看到查询形成但未执行 "queryString":"select * from \"risk_data_bcsd\" WHERE date between '2016-04-01' AND ' 2016-04-30' ""riskModules":[] 【参考方案1】:

您可以使用 BETWEEN 子句替换“大于 等于 AND 小于等于”条件。

变化

$sqlQuery = "select * from $tableName WHERE date between '". date('Y-m-d', strtotime($from_date))."' ";
$sqlQuery .= " AND '". date('Y-m-d', strtotime($to_date))."' ";

(OR)类似于

$sqlQuery = "select * from $tableName WHERE date >= '". date('Y-m-d', strtotime($from_date))."' ";
$sqlQuery .= " AND date <= '". date('Y-m-d', strtotime($to_date))."' ";

语法

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

快速链接

mysql-between-clause The SQL BETWEEN Operator

【讨论】:

我做了很多尝试,但没有任何效果.. 你试过我的答案@Sanvi? 我改为 $sqlQuery = "select * from $tableName WHERE date between '$from_date' AND '$to_date' ";但这也行不通。我尝试了很多方法,例如 = 并将其转换为日期函数等。我得到的输出为 "queryString":"select * from \"risk_data_bcsd\" WHERE date between '2016-04-01' AND '2016 -04-30' ""riskModules":[] 查询形成但没有在数据库中执行,为什么? 查看我的 edit 1 部分@Sanvi 我必须只将仰泳放到日期字符串或 $from_date 和 to_date 上?放置查询后输出如下,没有结果 "queryString":"select * from \"risk_data_bcsd\" WHERE date between '2016-04-01' AND '2016-04-30' ""riskModules" :[]

以上是关于如何使用 PHP 查询获取结果之间的日期 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用php获取两个日期之间的总时间差[重复]

收集两个日期之间的天数[重复]

PHP:以YYYY-MM-DD格式获取两个日期之间的天数[重复]

如何使用 PHP 获取当前日期和时间 [重复]

PHP如何获取二个日期的相差天数?

尝试使用 SQL 在 PHP 中获取两个日期之间的日期