如何在php和sql中检查两个日期之间的日期?
我发送了参数date以检查该日期是否介于数据库中的两个日期之间。 我发送给API的示例日期字符串参数是09/01/2020,格式是mm/dd/YYYY 此格式也适用于数据库表列中的日期字符串 现在在数据库中,我将开始日期设置为2020年8月21日,结束日期设置为2020年5月9日 我的代码是:如何在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 = $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'之间;也许吧,但您不应该将查询字符串连接在一起。