自定义日期格式之间的查询生成器
Query builder where between custom date format
我的字段 date
(varchar datatype
) 采用自定义日期格式,它是 dd-mm-yyyy
。
示例:01-01-2016
我想从数据库字段 date
中获取特定日期之间的数据。假设输入数据存储在变量中:startDate
& endDate
。
我试过这个查询,但结果很奇怪。
$query = DB::table('test')->whereBetween('date', array($startDate, $endDate))->get();
我认为它失败了,因为我使用了自定义 date
格式。
如何解决?
@updated
假设我有 date
个这样的人
29-12-2015
29-12-2015
29-12-2015
30-12-2015
29-12-2015
01-01-2016
06-01-2016
我这样设置 $startDate
& $endDate
$startDate = "01-12-2015";
$endDate = "01-01-2016";
这个脚本甚至没有得到任何结果
$query = DB::table('test')->whereBetween('date', array($startDate, $endDate))->get();
但如果我使用
$startDate = "01-12-2015";
$endDate = "31-12-2015";
我得到了所有数据......这是错误的结果,因为 2016 data
不应该在范围内......它有点像没有过滤
格式应该没有问题;除非您 POST 的数据格式与数据库保存的格式不同。确保数据库中 date
字段的格式与您存储在 $startDate
、$endDate
中的格式相匹配。
另外,我会采用稍微不同的方法来解决这个问题。这可以成为一个模型函数,称之为getDataBetweenDates()
。每次您需要查询数据库以检索指定日期范围内的数据时,您都会从控制器调用此函数:
- 型号
public function getDataBetweenDates($startDate, $endDate) {
$range = [$startDate, $endDate];
return $this
->whereBetween('date', $range)
->get();
}
- 控制器
$startDate = Input::get('start_date');
$endDate = Input::get('end_date');
$model = new Model; // use your model name;
$data = $model->getDataBetweenDates($startDate, $endDate);
因为你的 date datatype
是 varchar 你可以尝试在 mysql 中使用 str_to_date function
然后在使用 $starDate
和 $endDate
变量先转换格式。
示例代码是这样的
$startDate = date("Y-m-d", strtotime("01-12-2015"));
$endDate = date("Y-m-d", strtotime("31-12-2015"));
$query = DB::table('test')->whereBetween("str_to_date(date, '%d-%m-%Y')", array($startDate, $endDate))->get();
希望对您有所帮助。
我的字段 date
(varchar datatype
) 采用自定义日期格式,它是 dd-mm-yyyy
。
示例:01-01-2016
我想从数据库字段 date
中获取特定日期之间的数据。假设输入数据存储在变量中:startDate
& endDate
。
我试过这个查询,但结果很奇怪。
$query = DB::table('test')->whereBetween('date', array($startDate, $endDate))->get();
我认为它失败了,因为我使用了自定义 date
格式。
如何解决?
@updated
假设我有 date
个这样的人
29-12-2015
29-12-2015
29-12-2015
30-12-2015
29-12-2015
01-01-2016
06-01-2016
我这样设置 $startDate
& $endDate
$startDate = "01-12-2015";
$endDate = "01-01-2016";
这个脚本甚至没有得到任何结果
$query = DB::table('test')->whereBetween('date', array($startDate, $endDate))->get();
但如果我使用
$startDate = "01-12-2015";
$endDate = "31-12-2015";
我得到了所有数据......这是错误的结果,因为 2016 data
不应该在范围内......它有点像没有过滤
格式应该没有问题;除非您 POST 的数据格式与数据库保存的格式不同。确保数据库中 date
字段的格式与您存储在 $startDate
、$endDate
中的格式相匹配。
另外,我会采用稍微不同的方法来解决这个问题。这可以成为一个模型函数,称之为getDataBetweenDates()
。每次您需要查询数据库以检索指定日期范围内的数据时,您都会从控制器调用此函数:
- 型号
public function getDataBetweenDates($startDate, $endDate) {
$range = [$startDate, $endDate];
return $this
->whereBetween('date', $range)
->get();
}
- 控制器
$startDate = Input::get('start_date');
$endDate = Input::get('end_date');
$model = new Model; // use your model name;
$data = $model->getDataBetweenDates($startDate, $endDate);
因为你的 date datatype
是 varchar 你可以尝试在 mysql 中使用 str_to_date function
然后在使用 $starDate
和 $endDate
变量先转换格式。
示例代码是这样的
$startDate = date("Y-m-d", strtotime("01-12-2015"));
$endDate = date("Y-m-d", strtotime("31-12-2015"));
$query = DB::table('test')->whereBetween("str_to_date(date, '%d-%m-%Y')", array($startDate, $endDate))->get();
希望对您有所帮助。