我需要选择两个日期之间的订单记录。数据库上的日期格式如下: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, %Y
0(,而前者是一年中的一日的编号(在闰年中从1
到365
或366
(。
您的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_