我只想显示上个月的记录,不包括本月的日期。例如,今天是2月5日,我想显示1月1日至31日的记录。
我有一个表tbl_order_details
,在这里我需要分别按当前月份和上个月获取所有订单记录。日期类型的列名称为orderDate
,这是我要获取当前月份到日期的行的操作:
SELECT COUNT(1)
FROM tbl_order_details
where merchantCode= '$user_code'
AND MONTH(orderDate) = MONTH(CURRENT_DATE())
AND YEAR(orderDate) = YEAR(CURRENT_DATE())
但是我不知道如何显示一月的记录,其中不包含2月的任何记录
答案 0 :(得分:3)
SELECT * FROM tbl_order_details
WHERE YEAR(orderDate) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(orderDate) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
答案 1 :(得分:0)
在提及WHERE或JOIN'S中的列时,避免使用DATE(),MONTH(),DAY(),YEAR(),SUBSTR(),LEFT(),RIGHT(),LIKE),因为您将不再使用存在的索引在提到的列中。 例如:WHERE YEAR(orderDate)= ... 出于上述原因,请避免这样做。
我建议如下使用...
如果您的“ orderDate”列为日期类型,请执行以下操作:
SELECT COUNT(1)
FROM tbl_order_details
where merchantCode= '$user_code'
AND orderDate BETWEEN DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY)
AND LAST_DAY(DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY));
将返回上个月的第一天
DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY)
返回上个月的最后一天
LAST_DAY(DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY))
答案 2 :(得分:0)
要编写PHP代码,您可以通过使用strtotime
函数从PHP本身获取月份和年份,具体取决于表的输入,然后在sql查询中对其进行格式化。例如:
<?php
$month = date("M", strtotime("previous month"));
$year = date("Y", strtotime("this year"));
$query_get = 'SELECT COUNT(1) FROM tbl_order_details where merchantCode= {$user_code} AND MONTH(orderDate) = {$month} AND YEAR(orderDate) = {$year}'
?>
然后进一步将$query_get
传递给您的数据库查询以获取所需的结果。否则,您可以按照上面建议的@Rohit直推以下查询。
<?php
$query_get = 'SELECT * FROM tbl_order_details WHERE YEAR(orderDate) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(orderDate) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)'
?>