在sql中查找整月的数据

时间:2015-01-23 13:09:57

标签: mysql sql

我有这个查询,我提供至今和从约会开始。

SELECT * 
FROM sales 
WHERE date between to-date AND from-date;

现在我想用以下参数执行此查询

to-date = Oct-2015

some-other-date = Oct-2015

那就是我想要整个月的记录。

如果我有tofrom dates的查询,我将如何做到这一点,前提是它适用于月份可能相同且不同的两种情况。

更新

dataType column的{​​p> datedate

2 个答案:

答案 0 :(得分:1)

您可以找到包含任何给定时间戳的月份的第一天,其中包含这样的表达式。例如,通过使用时间戳NOW(),可以找到当月的第一天。

(DATE(NOW() - INTERVAL DAYOFMONTH(DATE(NOW()))

这很方便,因为那时你可以使用像

这样的表达式
(DATE(NOW() - INTERVAL DAYOFMONTH(DATE(NOW())) - INTERVAL 1 MONTH

如果你愿意,可以找到上个月的开头。各种日期算术都可用。

因此,您可以使用以下表达式查找当月前一个月内item_date的所有记录。

WHERE item_date>=(DATE(NOW()-INTERVAL DAYOFMONTH(DATE(NOW()))- INTERVAL 1 MONTH
  AND item_date < (DATE(NOW()-INTERVAL DAYOFMONTH(DATE(NOW()))

请注意,我们将一段时间的结束作为不等式<)投射到该时间范围结束之后的那一刻。

您可能会发现此写法很有用。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

创建名为TRUNC_MONTH()的存储函数以执行将任意时间戳转换为该月的第一天通常很有用。它使您的SQL语句更易于阅读。

答案 1 :(得分:0)

select * from sales 
where from-date >= 1-Oct-2015 
and to-date <= 1-Nov-2015

更新

 select * from sales 
where date >= from-date 
and date <= to-date 

这是SQLFIDDLE

您可以从tofrom日期获得月份并找到该月的记录

SELECT * FROM sales
WHERE MONTH('2002-01-03') AND MONTH('2002-01-3')  

SqlFiddle of Using Month Function