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.
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'
OU
SELECT *
FROM xxx
WHERE CONVERT(date, dates, 101) BETWEEN '1/1/2013' and '1/2/2013'
Démo sur SQLFiddle
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') ;
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.
$Date3 = date('y-m-d');
$Date2 = date('y-m-d', strtotime("-7 days"));
SELECT * FROM disaster WHERE date BETWEEN '".$Date2."' AND '".$Date3."'
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)
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.
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 :)