[英]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.