php使用格式化日期列选择2个日期之间的记录



我需要选择两个日期之间的订单记录。数据库上的日期格式如下:2020年1月1日->使用CCD_ 1格式。

我试图得到的记录是:

$from_date = 'January 1, 2020';
$to_date = 'January 5, 2020';
$sql = "
SELECT * 
FROM orders 
WHERE order_date STR_TO_DATE(order_date, '%F %j, %Y') between STR_TO_DATE('$from_date', '%F %j, %Y') and STR_TO_DATE('$to_date', '%F %j, %Y') 
GROUP 
BY order_id
";

结果是null

我也尝试使用convert(order_date,'%F %j, %Y'),但没有成功,并向我显示了相同的结果null

希望我能把这个问题解释清楚。

感谢

MySQL中没有'%F'说明符。您可能需要%M'

此外,'%j'应该是'%e':后者提供了一个月中的一天的编号(从1%F %j, %Y0(,而前者是一年中的一日的编号(在闰年中从1365366(。

您的where子句应该看起来像:

where str_to_date(order_date, '%M %e, %Y') 
between str_to_date(:from_date, '%M %e, %Y') and str_to_date(:to_date, '%M %e, %Y') 

注:

  • 使用准备好的语句!不要在查询字符串中连接变量:这既低效(数据库每次使用不同的参数执行语句时都需要解析语句(又不安全(您的代码被打开以进行SQL注入(

  • 您应该真正考虑使用合适的数据类型来存储数据;将日期存储为字符串是低效的(无论何时需要过滤字符串,都需要转换字符串(和不安全的(当数据存储在表中时,无法保证数据的完整性(

  • CCD_ 15和CCD_

相关内容

  • 没有找到相关文章

最新更新