2010-04-15 7 views
4

Je souhaite vérifier si une date est comprise entre la date de début et la date de fin.Date de conclusion entre la date de début et la date de fin

j'ai ajouté une clause where

where datepaid between '2010-04-01' AND '2010-04-15' 

mais le problème est qu'il exclut '2010-04-15'.

Il devrait inclure la date de fin aussi comment je peux faire ceci?

S'il vous plaît aidez-moi sur ce

Cordialement,

Pankaj

Répondre

14

Spécifiez les parties de temps explicitement:

WHERE datepaid BETWEEN '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' 
+0

comprend-il comme 2010-04-15 23: 59: 59.56? –

+1

@Jens: Pour autant que je sache, MySQL ne stocke pas les secondes fractionnaires. Si cela les soutient, alors je changerais la clause en quelque chose comme 'BETWEEN '2010-04-01 00: 00: 00.000' ET '2010-04-15 23: 59: 59.999'' à la place. – LukeH

5

Peut-être que vos dates comprennent les temps intraday. Essayez ceci:

where '2010-04-01' <= datepaid AND datepaid < '2010-04-16' 
+1

hi merci pour la réponse que i ai moyens pour ajouter l'intervalle de 1 jour à la date de fin pour aller chercher le bon enregistrement –

0

essayer

where datepaid between '2010-04-01' AND '2010-04-15 23:59:59' 
+2

j'aime que tant de gens ont gardé leurs avatars Licorne! –

-1

ajouter cette clause:

OR datepaid = '2010-04-15' 
+0

Cela ne fera rien. La clause 'BETWEEN' couvre déjà ce cas. –

1
WHERE datepaid >= '2010-04-01' 
     AND datepaid < '2010-04-15' + INTERVAL 1 DAY 
0

Il est probablement dû à des dates ayant du temps:

select 
    '2010-04-15' between '2010-04-01' AND '2010-04-15', -- 1 
    '2010-04-15 12:00:00' between '2010-04-01' AND '2010-04-15', -- 0 
    '2010-04-15 12:00:00' between '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' -- 1 

Soit ajouter du temps à aller délimiteurs ou tronquer les valeurs avant la comparaison:

select 
    '2010-04-15 12:00:00' between '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' -- 1 
    cast('2010-04-15 12:00:00' as date) between '2010-04-01' AND '2010-04-15' -- 1 

Je n'ai pas vérifié, mais je suppose que la performance est meilleure sans coulée.

0

où CONVERT (VARCHAR (10), datepaid, 23) entre '01/04/2010' et '' 2010-04-15

Questions connexes