php - php使用格式化的日期列选择2个日期之间的记录
问题描述
我需要选择两个日期之间的订单记录。数据库上的日期格式如下:2020 年 1 月 1 日 -> 使用%F %j, %Y
格式。
我尝试获取记录是:
$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
to 31
),而前者是一年中的一天数(从1
to 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 注入开放)
你真的应该考虑使用正确的数据类型来存储你的数据;将日期存储为字符串效率低下(您需要在需要过滤它们时转换字符串)并且不安全(您不能保证数据存储在表中时的数据完整性)
select *
相处group by
不好
推荐阅读
- javascript - 所有的酒吧应该是相同的高度。数据部分应该是彩色的,其余部分应该是灰色的
- php - 我的弹出窗口没有显示在上面,我已经尝试了很多方法来在 laravel 中做到这一点
- react-native-android - 添加 efr=1 时动态链接中出现错误
- python - 有背景颜色时 QComboBox 框架发生变化
- pivot - 如何在谷歌电子表格中绘制数据透视表
- chocolatey - 安装巧克力时的消息
- google-cloud-platform - 如何使用云作曲家在位于不同项目的存储桶之间移动文件
- c++ - 使用多个类时递归调用终止
- python - Crontab 错误:找不到 64 位 Oracle 客户端库:“libclntsh.so:无法打开共享对象文件:没有这样的文件或目录
- python - 模块 'cv2.cv2' 没有属性 'read'