繁体   English   中英

MySQL 获取特定月份、年份之间的记录

[英]MySQL getting records between specific month, year

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

例如,TransactionDate 在 6, 2016 和 8, 2017 之间的所有记录。

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

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

然而,它只给了我 2016 年 6 月、2016 年 7 月和 2017 年 8 月的记录。它跳过了 2017 年 1 月、2016 年 11 月的 Spet 记录。

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

在此处输入图片说明

这是返回结果的截图

在此处输入图片说明

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

谢谢。

您只需按 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

您当前的查询有什么问题,您获取的数据是月份是六月、七月或八月,而年份是 2016 年或 2017 年。这是不对的,您想按日期本身进行过滤,而不是组件。

你似乎想要:

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

我认为这是你需要的

SELECT Amount , ExpenseType , 
      MONTHNAME(TransactionDate) AS TransactionMonthString
      Year(TransactionDate) AS TransactionYearString
FROM Accounts 
WHERE TransactionDate >= '2016-06-01' AND TransactionDate <= '2017-08-01'   
ORDER BY TransactionDate
select Amount from Accounts where TransactionDate  BETWEEN '2016-04-02' AND '2017-08-03';

试试这个,祝你好运

您可以使用 mysql 的 date_format 函数轻松完成此操作

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

这应该可以完美运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM