首页 > 解决方案 > 在 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 时它工作正常

有什么解决办法吗?

标签: phpmysqlsqldatabaselaravel

解决方案


如果可能,请将数据类型从 varchar 更改为日期、日期时间或时间戳。这里的问题是数据库不了解如何按时间顺序对日期列进行排序——因为它认为它正在处理标准文本并希望按字母顺序对它们进行排序。使用 datetime 允许它按日期对行进行排序,然后选择所需的子集。

幸运的是,您通常可以更改列的数据类型,只要值采用标准格式(并且您的表不是数百万条记录),它通常会很好地转换它们。我假设你在这里使用 mysql,但大多数数据库应该有类似的东西。

ALTER TABLE <tableName> MODIFY <columnName> datetime;

当然,我建议制作表格的副本并首先尝试转换 - 只是为了安全起见。


推荐阅读