我需要在两个日期之间获取数据,但它不起作用。
我的表 -
从日期和日期参数是 -
$this->db->select('*', FAlSE);
$this->db->where('t.Flag', '0');
$this->db->where('tpd.Status', $status);
$this->db->where("STR_TO_DATE(tpd.Month, '%Y-%m') >=", date($from_date));
$this->db->where("STR_TO_DATE(tpd.Month, '%Y-%m') <=", date($to_date));
$this->db->from('test_periodicity_details tpd');
$this->db->join('test t', 'tpd.Test_Id=t.Test_Id');
$this->db->join('school_information si', 't.School_Id=si.School_Id', 'left');
$this->db->join('test_status ss', 'tpd.Status=ss.Test_Status_Id', 'left');
echo $this->db->get_compiled_select();
$query = $this->db->get();
if ($query->num_rows() > 0){
return $query->result();
}
else {
return false;
}
表格列月类型为 varchar
var categoryName = "Social";
var query = _context.Events.Include(i => i.Category);
if (String.IsNullOrEmpty(categoryName))
{
query = query.Where(item => item.Category.CategoryName.Contains(categoryName));
}
var viewModel = new EventIndexData();
viewModel.Events = await query.ToListAsync();
答案 0 :(得分:1)
我已解决了查询 -
$this->db->select('*', FAlSE);
$this->db->where('t.Flag', '0');
$this->db->where('tpd.Status', $status);
$this->db->where('tpd.Month>=', date($from_date));
$this->db->where('tpd.Month<=', date($to_date));
$this->db->from('test_periodicity_details tpd');
$this->db->join('test t', 'tpd.Test_Id=t.Test_Id');
$this->db->join('school_information si', 't.School_Id=si.School_Id', 'left');
$this->db->join('test_status ss', 'tpd.Status=ss.Test_Status_Id', 'left');
//echo $this->db->get_compiled_select();
$query = $this->db->get();
if ($query->num_rows() > 0){
return $query->result();
}
else {
return false;
}
答案 1 :(得分:0)
由于date()返回一个字符串,因此不要将月份值转换为日期时间(使用STR_TO_DATE())。 date()的第一个参数是要输出的格式字符串 - 第二个参数是实际时间戳(日期)。所以date($from_date)
== date('2016-12')
== '2016-12'
。如果你继续使用STR_TO_DATE(),那么你将拥有一个日期时间值和一个字符串值 - 而MySQL应该能够合并它不必要的值。
您可以使用BETWEEN运算符将月份与日期范围进行比较:
$this->db->where('tpd.Month BETWEEN \''.$from_date .'\' AND \''.$to_date.'\'');
否则只需用以下代码替换两个WHERE条件调用:
$this->db->where('tpd.Month>=', $from_date);
$this->db->where('tpd.Month<=', $to_date);
您可以在this sqlfiddle中查看更新查询的结果。我在this site上有一个在PHP(但没有CodeIgniter)工作的例子。它使用MySQLi functions运行等效查询。