我的 SQL 查询,用于获取所选月份和年份的所有先前记录



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

我已经尝试过这个mysql查询作为:

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

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

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

获取记录created_date小于所选月份和年份的第一个日期。

如果您的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'"

希望这会对您有所帮助:

像这样使用 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

试试这个:

select * form tblusers where  month(created_date)<8 and year(created_date)<=2018
SELECT * FROM tblusers WHERE YEAR(created_date)<='2018' AND MONTH(created_date)<='08';

尝试这样做以等于月份+您的sql语法中有"from"一词的错误(但我想只要您得到结果,就不是错误。

您的查询根据您在此处设置的内容正确工作。它不应该返回高于 08 个月的结果,这实际上是您的条件:

month(created_date)<'08' 

这意味着,如果您的值为 09,10,11 ...它不会通过您的条件,因为它高于 08。

我更喜欢创建一个复合值

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

最新更新