Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php和sql中检查两个日期之间的日期?_Php_Mysql_Sql - Fatal编程技术网

如何在php和sql中检查两个日期之间的日期?

如何在php和sql中检查两个日期之间的日期?,php,mysql,sql,Php,Mysql,Sql,我发送了参数date以检查该日期是否介于数据库中的两个日期之间。 我发送给API的示例日期字符串参数是09/01/2020,格式是mm/dd/YYYY 此格式也适用于数据库表列中的日期字符串 现在在数据库中,我将开始日期设置为2020年8月21日,结束日期设置为2020年5月9日 我的代码是: $date = $data["date"]; $sql = "SELECT * FROM promo WHERE STR_TO_DATE('" . $date .

我发送了参数date以检查该日期是否介于数据库中的两个日期之间。 我发送给API的示例日期字符串参数是09/01/2020,格式是mm/dd/YYYY

此格式也适用于数据库表列中的日期字符串

现在在数据库中,我将开始日期设置为2020年8月21日,结束日期设置为2020年5月9日

我的代码是:

$date = $data["date"];
$sql = "SELECT * FROM promo WHERE STR_TO_DATE('" . $date . "', '%M%M/%d%d/%Y%Y%Y%Y') 
between date_start and date_end";
获取我发送给API的日期字符串参数

示例表名为promo, 我的代码是:

$date = $data["date"];
$sql = "SELECT * FROM promo WHERE STR_TO_DATE('" . $date . "', '%M%M/%d%d/%Y%Y%Y%Y') 
between date_start and date_end";
但我没有明白。 如何纠正这一点以获得它

编辑了我的最新代码,如下所示,但仍未获得:

$date = $data["date"];
$date = DateTime::createFromFormat('m/d/Y', $date);
$date = $date->format('m/d/Y');
$sql = "SELECT * FROM promo WHERE $date BETWEEN STR_TO_DATE(date_start, '%m/%d/%Y') AND
            STR_TO_DATE(date_end, '%m/%d/%Y')";
你说:

现在在数据库中,我将开始日期设置为2020年8月21日,结束日期设置为2020年5月9日

这不是最佳实践,您应该始终在MySQL中将日期存储为适当的日期或日期时间类型。如果这样做,您只需要在查询中进行范围比较:

SELECT *
FROM promo
WHERE ? BETWEEN date_start and date_end;
如果您必须坚持当前的设计,那么您实际上必须在开始和结束日期使用STR_to_DATE:

SELECT *
FROM promo
WHERE ? BETWEEN STR_TO_DATE(date_start, '%m/%d/%Y') AND
                STR_TO_DATE(date_end, '%m/%d/%Y');
去医院?在上面的占位符中,您应该绑定有效的PHP日期或有效的MySQL日期文本字符串。但是,我再次强烈建议解决设计问题。

示例

create table promo (id int not null,post_date varchar(255));
insert into promo values (1,'09/01/2020');
sql


列的数据类型是什么?@Jens,列的数据类型是string不要将日期存储为string。将其存储为date我可以使用corvert string to date吗?可能像这样$sql=SELECT*FROM promo WHERE STR_to_date?,“%m/%d/%Y”之间的STR_to_datedatedate_start,“%m/%d/%Y”和STR_to_DATEdate_end,“%m/%d/%Y”;使用占位符和准备好的语句并传递$日期。%m/%d/%Y或%m%m/%d%d/%Y%Y?前者m、 例如,表示两位数的月份,不需要在执行时重复。您的意思是:$date=$data[date]$日期=日期时间::createFromFormat'm/d/Y','$日期$日期=$date->格式为“m/d/Y”$sql=从促销活动中选择*WHERE'$日期。”在STR_TO_DATEdate_start'%m/%d/%Y'和STR_TO_DATEdate_end'%m/%d/%Y'之间;也许吧,但您不应该将查询字符串连接在一起。