我的sql查询,以获取所选月份和年份的所有以前的记录

h43kikqp  于 2021-06-23  发布在  Mysql
关注(0)|答案(5)|浏览(335)

我想从mysql表中获取所选月份和年份的所有以前的记录。e、 g如果我选择的月份和年份是08-2018,那么查询应该显示从2018年8月开始的所有以前的记录。
我尝试了以下mysql查询: "select * form tblusers where year(created_date)<=2018 and month(created_date)<'08'"; 但它不包括我有超过8个月的记录,例如09-2017等

uqjltbpv

uqjltbpv1#

试试这个:

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

6ojccjat2#

您可以尝试更简单的方法:
获取记录的创建日期小于所选月份和年份的第一个日期。
万一你 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'"
pcrecxhr

pcrecxhr3#

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

如果你的sql语法在单词“from”中有一个错误(但我猜只要你得到结果就不是这个错误)。
您的查询根据您在那里设置的内容正常工作。它不应该返回高于08个月的结果,这实际上是您的状况:

month(created_date)<'08'

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

1szpjjfi

1szpjjfi4#

我更喜欢创造复合价值

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

oyt4ldly5#

希望这能帮助您:
像这样使用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

相关问题