我有一个名为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个)
以下是返回结果的屏幕截图
我的查询有什么问题?此查询也将是动态的,即用户将从表单中选择月份和年份,结果将返回给他们。
谢谢。
答案 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;
这应该工作完美。