web-dev-qa-db-fra.com

Requête pour sélectionner des données entre deux dates au format m/j/aaaa

Je rencontre un problème lorsque j'essaie de sélectionner des enregistrements dans une table entre deux dates.

m en utilisant la requête suivante

select * from xxx where dates between '10/10/2012' and '10/12/2012'

cette requête fonctionne pour moi, mais lorsque les dates sont au format 1/1/2013 .. cela ne fonctionne pas ..

plz résoudre mon problème dès que possible.

4
Rahul Gautam

Cette solution fournit l'opération CONVERT_IMPLICIT pour votre condition dans le prédicat.

SELECT * 
FROM xxx 
WHERE CAST(dates AS date) BETWEEN '1/1/2013' and '1/2/2013'

enter image description here

OU 

SELECT * 
FROM xxx 
WHERE CONVERT(date, dates, 101) BETWEEN '1/1/2013' and '1/2/2013'

enter image description here

Démo sur SQLFiddle

7
Aleksandr Fedorenko

Essaye ça

SELECT * 
FROM xxx 
WHERE dates BETWEEN STR_TO_DATE('10/10/2012', '%m/%d/%Y') 
  AND STR_TO_DATE('10/12/2012', '%m/%d/%Y')  ;

ou 

SELECT * 
FROM xxx 
WHERE STR_TO_DATE(dates , '%m/%d/%Y') BETWEEN STR_TO_DATE('10/10/2012', '%m/%d/%Y') 
  AND STR_TO_DATE('10/12/2012', '%m/%d/%Y')  ;
1
user2001117

vous devez fractionner la date et l'heure, puis la stocker au format souhaité, par exemple jj/mm/aaaa. alors vous pouvez utiliser cette requête avec between, mais j’objecte à l’utilisation de cette option car elle recherchera toutes les données de votre base de données, je vous suggère donc d’utiliser datiff.

        Dim start = txtstartdate.Text.Trim()
        Dim endday = txtenddate.Text.Trim()
        Dim arr()
        arr = Split(start, "/")
        Dim dt As New DateTime
        dt = New Date(Val(arr(2).ToString), Val(arr(1).ToString), Val(arr(0).ToString))
        Dim arry()
        arry = Split(endday, "/")
        Dim dt2 As New DateTime
        dt2 = New Date(Val(arry(2).ToString), Val(arry(1).ToString), Val(arry(0).ToString))

        qry = "SELECT * FROM [calender] WHERE datediff(day,'" & dt & "',[date])>=0 and datediff(day,'" & dt2 & "',[date])<=0 "

ici, j'ai utilisé le format jj/mm/aaaa.

1
Bipul Roy
$Date3 = date('y-m-d');
$Date2 = date('y-m-d', strtotime("-7 days"));
SELECT * FROM disaster WHERE date BETWEEN '".$Date2."' AND  '".$Date3."'
0
select * from xxx where dates between '2012-10-10' and '2012-10-12'

J'utilise toujours YYYY-MM-DD dans mes vues et je n'ai jamais eu de problème. De plus, il est lisible et non équivoque.
Sachez que l'utilisation de BETWEEN pourrait ne pas renvoyer ce que vous attendez d'un champ DATETIME, car cela éliminerait les enregistrements datés du '2012-10-12 08:00' par exemple.
Je préférerais utiliser where dates >= '2012-10-10' and dates < '2012-10-13' (plus bas que le jour suivant)

0
Patrick Honorez

Par défaut, Mysql enregistre et renvoie les valeurs de type de données «date» au format «AAAA/MM/JJ». Donc, si nous voulons afficher la date dans un format différent, nous devons formater les valeurs de date conformément à nos exigences en langage de script

Et en passant, quel est le type de données de la colonne et dans quel format vous stockez la valeur.

0
user2001117
SELECT * FROM tablename WHERE STR_TO_DATE(columnname, '%d/%m/%Y')
  BETWEEN STR_TO_DATE('29/05/2017', '%d/%m/%Y')
    AND STR_TO_DATE('30/05/2017', '%d/%m/%Y')

Ça marche parfaitement :) 

0
S M Jobayer Alam