MySQL在特定月份,年份之间获取记录

时间:2017-08-08 11:17:32

标签: mysql database between

我有一个名为Accounts的表,其中有一个名为TransactionDate的日期列。我需要获取TransactionDate在月,年之间的所有记录。

例如,TransactionDate在2016年6月6日至2017年8月之间的所有记录。

我的查询字符串如下所示:

SELECT Amount 
  FROM Accounts 
 WHERE (MONTH(TransactionDate) BETWEEN 6 and 8) 
   AND (YEAR(TransactionDate) BETWEEN 2016 and 2017)  
 ORDER BY TransactionDate ASC

但是它只给我2016年6月,7月和2017年8月的记录。它会跳过2017年1月的记录,Spet,2016年11月。

我附上了所有记录的TransactionDate列的截图(其中有31个)

enter image description here

以下是返回结果的屏幕截图

enter image description here

我的查询有什么问题?此查询也将是动态的,即用户将从表单中选择月份和年份,结果将返回给他们。

谢谢。

5 个答案:

答案 0 :(得分:1)

您只需按2017-08和2016-06之后的那些过滤查询

SELECT Amount 
  FROM Accounts 
 WHERE TransactionDate > '2016-06-01T00:00:00' 
   AND TransactionDate < '2017-08-01T00:00:00' 
 ORDER BY TransactionDate ASC

您当前查询的错误在于您在6月,7月或8月的月份,以及2016年或2017年的年份中获取数据。这不是正确的,你想过滤日期本身,而不是它的组件。

答案 1 :(得分:0)

你似乎想要:

select a.Amount
from Accounts a
where a.TransactionDate >= '2016-06-01' AND
      a.TransactionDate < '2017-09-01'
order by a.TransactionDate ASC

答案 2 :(得分:0)

我认为这就是你所需要的

{{1}}

答案 3 :(得分:0)

select Amount from Accounts where TransactionDate  BETWEEN '2016-04-02' AND '2017-08-03';

试试这个,祝你好运

答案 4 :(得分:0)

您可以通过使用mysql的date_format函数轻松地做到这一点

 SELECT 
     Amount
 FROM
     Accounts
 WHERE
     DATE_FORMAT(TransactionDate, '%Y-%m') BETWEEN '2016-06' AND '2017-08' ORDER BY TransactionDate ASC;

这应该工作完美。

相关问题