我的SQL查询从选定的月份和年份中获取所有以前的记录

时间:2018-08-13 12:33:59

标签: php mysql codeigniter codeigniter-3 codeigniter-query-builder

我想从选定的月份和年份从mysql表中获取所有以前的记录。 例如,如果我选择的月份和年份是08-2018,则查询应显示2018年8月以前的所有记录。

我已经尝试过以下mysql查询:

"select * form tblusers where year(created_date)<=2018 and month(created_date)<'08'";

但是它不包括我月份大于8的记录,例如09-2017等

5 个答案:

答案 0 :(得分:1)

您可以尝试更简单的方法:

获取记录created_date小于所选月份和年份的1st日期。

如果您的created_date字段的类型为Date,则可以尝试执行以下操作:

"select * form tblusers where created_date < '2018-08-01'"

如果您的created_date字段的类型为Datetime,则可以尝试执行以下操作:

"select * form tblusers where created_date < '2018-08-01 00:00:00'"

答案 1 :(得分:1)

希望这对您有帮助:

使用像这样的CI查询构建器类:

$year = '2018';
$month = '08';
$query = $this->db->from('tblusers')
         ->where('MONTH(created_date) <', $month)
         ->where('YEAR(created_date) <=', $year)
         ->get();
if ($query->num_rows() > 0) 
{
  print_r($query->result());
}

echo $this->db->last_query();

这样更好的使用方式:

$date = '2017-09-01';
$query = $this->db->from('tblusers')
         ->where('DATE(created_date) >=', $date)
         ->get();

更多信息:https://codeigniter.com/user_guide/database/query_builder.html

答案 2 :(得分:0)

尝试一下:

select * form tblusers where  month(created_date)<8 and year(created_date)<=2018

答案 3 :(得分:0)

SELECT * FROM tblusers WHERE YEAR(created_date)<='2018' AND MONTH(created_date)<='08';

请尝试将其等于月份,并且+ +中的SQL语法中的“ from”一词有错误(但我想只要得到结果,这不是错误。

您的查询将根据您在此处进行的设置正确运行。它不应返回高于08个月的结果,这实际上是您的情况:

month(created_date)<'08' 

这意味着,如果您的值是09,10,11 ...,则它不符合您的条件,因为它高于08。

答案 4 :(得分:0)

我更喜欢创建一个复合值

select * from tblusers where 
(year(created_date) * 12 +  month(created_date))
<= 2018 * 12 + 8;