【问题标题】:Query builder where between custom date format查询生成器在自定义日期格式之间的位置
【发布时间】:2016-04-15 21:01:55
【问题描述】:

我的字段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 不应该在范围内...有点像没有过滤

【问题讨论】:

  • 你能发布预期的数据结果吗?
  • @jameshwartlopez 在我的update section 中我希望得到01-12-201501-01-2016 之间的结果,其中来自顶部的6 个数据...06-01-2016 不包括在内,因为它不在范围内
  • 那么你使用 whereBetween 有什么问题?
  • @jameshwartlopez 我不知道为什么使用范围01-12-201501-01-2016 无法获得预期的结果....使用范围01-12-2015 和@987654345 @我得到所有数据...就像没有过滤
  • 这是因为您的日期数据类型是 varchar。尝试使用构建sql查询并运行它来测试。

标签: laravel laravel-4 laravel-query-builder


【解决方案1】:

格式应该没有问题;除非您发布的数据与数据库保存的格式不同。确保数据库中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);

【讨论】:

    【解决方案2】:

    由于您的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();
    

    希望对您有所帮助。

    【讨论】:

    • 很好,它现在可以通过一些自定义来调整我的脚本:D
    • 很高兴它有帮助。yosh! :)
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多