2017-08-08 2 views
0

J'ai une table appelée Comptes qui a une colonne de date nommée TransactionDate. Je dois obtenir tous les enregistrements où TransactionDate est entre mois, année.MySQL obtenir des enregistrements entre le mois spécifique, l'année

Par exemple, tous les enregistrements où TransactionDate est compris entre 6, 2016 et 8, 2017.

Ma chaîne de requête ressemble à:

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

Cependant, il ne donne que me records pour Juin, Juillet 2016 et Août 2017. Il ignore les records pour Jan 2017, Spet, nov 2016.

Je joins la capture d'écran de la colonne TransactionDate de tous les dossiers (il y a 31 d'entre eux)

enter image description here

Voici la capture d'écran du résultat retourné

enter image description here

Quel est le problème avec ma requête? De plus, cette requête va être dynamique, c'est-à-dire que les utilisateurs choisiront le mois et l'année à partir d'un formulaire et le résultat leur sera retourné.

Merci.

+0

Cette sortie en fonction de l'entrée que vous présentez et la requête que vous exécutez Look Correct – RiggsFolly

Répondre

1

Vous filtrez simplement les requêtes par ceux qui sont AVANT 2017-08 et 2016-06 APRÈS

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

ce qui ne va pas avec votre requête en cours est que vous obtenez des données où le mois est Juin, Juillet, ou Août, ET où l'année est 2016 ou 2017. Ce n'est pas correct, vous voulez filtrer par la date elle-même, pas ses composants.

0

Vous semble vouloir:

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

Je pense que ce que vous avez besoin

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'; 

essayer ça, bonne chance