2017-08-08 8 views
0

私はTransactionsという名前の日付列を持つAccountsというテーブルを持っています。私はTransactionDateが月、年の間にあるすべてのレコードを取得する必要があります。MySQLは特定の月、年の間にレコードを取得します

例えば、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 

それだけで、私は6月のレコード2016年7月となりますが8月2017それは

(そのうちの31がある)私はすべてのレコードのTransactionDate列のスクリーンショットを添付しています2017年1月、SPET、11月2016年

のレコードをスキップしますここ

enter image description here

は私のクエリが間違っている何返される結果

enter image description here

のスクリーンショットですか?また、このクエリは動的になります。つまり、ユーザーはフォームから月と年を選択し、その結果が返されます。

ありがとうございます。

+0

を試してみて、実行するクエリLook Correct – RiggsFolly

答えて

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年のいずれかです。これは正しくありません。日付でフィルタリングしたいのではなく、そのコンポーネントでフィルタしたいと思っています。あなたが望むように思えるでしょう

0

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

私はあなたが

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 
0
select Amount from Accounts where TransactionDate BETWEEN '2016-04-02' AND '2017-08-03'; 

を必要とし、この何だと思う出力はあなたが表示され、入力に基づいて、この、幸運

関連する問題