所以,我有一個視圖報告顯示,它過濾 Period From 和 Period To ,如下所示:

而且,我有日期如下的員工資料:

然后,當我查看報告時,2 月的 end_date 不會出現,因為 Period From 和 To 程序僅在一月。它應該出現,因為 start_date 是在一月份。

這是我的查詢,請幫忙。
$this->db->select("a.id, a.employee_id, a.employee_name, a.leave_name, a.start_date, a.end_date, a.status,
b.id, b.employee_id, b.job_title_name, b.employment_status_name")
->join('hr_employee b', 'a.employee_id = b.employee_id', 'left')
->where("a.start_date AND a.end_date BETWEEN '$data[from]' AND '$data[to]'");
return $this->db->get('hr_leaves a');
uj5u.com熱心網友回復:
開始日期確實在兩個日期引數之間,但您不過濾開始日期,只過濾結束日期!從開始日期開始,您需要將其設定為非零值。
由于結束日期不屬于引數指定的日期范圍,因此突出顯示的行被過濾掉。
你應該要么
- 僅過濾開始日期 (
"a.start_date BETWEEN '$data[from]' AND '$data[to]') 或 - 過濾開始日期和結束日期,但使用
or運算子,否則將不會回傳突出顯示的行 ("(a.start_date BETWEEN '$data[from]' AND $data[to]) OR (a.end_date BETWEEN '$data[from]' AND '$data[to]'))。
另請注意,您應該使用引數而不是字串插值來在查詢中包含 from 和 to 引數。
uj5u.com熱心網友回復:
解決方案 1: 如果有效,請使用此查詢:
->where("('$data[from]' BETWEEN a.start_date AND a.end_date) OR ('$data['to']' BETWEEN a.start_date AND a.end_date");
解決方案2:
創建一個日期間隔并查詢員工開始和結束日期之間的每個日期,如果為真,則添加到串列中$sql_res。
$begin = new DateTime($data['from']);
$end = new DateTime($data['to']);
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);
$sql_res = array();
foreach ($period as $dt) {
$curent_date = $dt->format("Y-m-d");
$this->db->select("a.id, a.employee_id, a.employee_name, a.leave_name, a.start_date, a.end_date, a.status,
b.id, b.employee_id, b.job_title_name, b.employment_status_name")
->join('hr_employee b', 'a.employee_id = b.employee_id', 'left')
->where("$curent_date BETWEEN a.start_date AND a.end_date");
$sql_res[] = $this->db->get('hr_leaves a')->row();
}
return $sql_res;
uj5u.com熱心網友回復:
如果您希望期間過濾器找到日期范圍完全重疊的任何員工資料,您需要:
where least(a.end_date, <period-end-date>) >= greatest(a.start_date, <period-start-date>)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/404824.html
標籤:
上一篇:如何查詢以回傳start_date和end_date之間的資料范圍?
下一篇:Django資料庫存盤問題
