比较月份和年份Mysql

时间:2016-12-10 06:14:03

标签: php mysql codeigniter

我需要在两个日期之间获取数据,但它不起作用。

我的表 -

enter image description here

从日期和日期参数是 -

$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();

2 个答案:

答案 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运行等效查询。