我想从选定的月份和年份从mysql表中获取所有以前的记录。 例如,如果我选择的月份和年份是08-2018,则查询应显示2018年8月以前的所有记录。
我已经尝试过以下mysql查询:
"select * form tblusers where year(created_date)<=2018 and month(created_date)<'08'";
但是它不包括我月份大于8的记录,例如09-2017等
答案 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;