php - 在 ProductSell 模型中有一个日期列类型是 varchar 和格式 d/m/Y 如何使用 wherebetween 检索数据?
问题描述
我有一个模型 ProductSell ,其列 date 类型为 varchar ,格式为 d/m/Y 。
假设我有两个日期 31/03/2019 和 01/04/2019 。我想在我尝试的这些日期之间获取数据
$productsale=ProductSell::whereBetween('date',[$request->from,$request-
>to])->get();
当日期是 31/03/2019 和 01/04/2019 这不起作用但是当日期是 01/03/2019 和 31/03/2019 时它工作正常
有什么解决办法吗?
解决方案
如果可能,请将数据类型从 varchar 更改为日期、日期时间或时间戳。这里的问题是数据库不了解如何按时间顺序对日期列进行排序——因为它认为它正在处理标准文本并希望按字母顺序对它们进行排序。使用 datetime 允许它按日期对行进行排序,然后选择所需的子集。
幸运的是,您通常可以更改列的数据类型,只要值采用标准格式(并且您的表不是数百万条记录),它通常会很好地转换它们。我假设你在这里使用 mysql,但大多数数据库应该有类似的东西。
ALTER TABLE <tableName> MODIFY <columnName> datetime;
当然,我建议制作表格的副本并首先尝试转换 - 只是为了安全起见。
推荐阅读
- angular - Primeng 多选显示所选值,由特殊字符分隔,而不是默认逗号
- mysql - SELECT 临时表和 SET NULL 重复值
- c# - 异步检索请求时的 C# HTTP Listener ObjectDisposedException
- mysql - 加快对大表的查询
- sql - ORA-01652 从游标获取时出错
- mongodb - 为每日活跃用户优化 MongoDB 查询
- android - android 4.4 Kitkat 上未显示 AlertDialog 分隔符
- java - 想编程计算器,想把String变成真正的算子
- php - 如何将现有数据与新数据合并?
- python - 获得滚动 15 分钟的最大值