2016-06-22 9 views
1

Entschuldigung für mein schlechtes technisches Englisch. Ich versuche, Daten von meiner Datenbank zwischen jetzt mit 1-Monats-Intervall zu bekommen.Datum im Varchar-Format gespeichert. Ergebnis Ausgabe

Diese Abfrage Arbeit perfekt (221 Zeilen zurückgibt)

SELECT idEcare,reference 
FROM DEMS 
WHERE (((etatSuivant ="Etat_ADM_131276535415392&SURF=Transmis") 
OR (etatSuivant = "Etat_ADM_121276535415390&SURF=Traitement en cours") 
OR (etatSuivant = "Etat_ADM_11276535415374&SURF=A l étude") 
OR (etatSuivant = "Etat_ADM_81276535415384&SURF=Programmé")) 
AND ((categorisation LIKE "%Propreté:Tas sauvage%") 
OR (categorisation LIKE "%Circulation et stationnement:Véhicule gênant%") 
OR (categorisation LIKE "%Circulation et stationnement:Véhicule ventouse_Epave_Brûlé%") 
OR (categorisation LIKE "%Propreté:Passage ponctuel%") 
OR (categorisation LIKE "%Propreté:Corbeille pleine%") 
OR (categorisation LIKE "%Propreté:Huile_Verre cassé%") 
OR (categorisation LIKE "%Propreté:Désherbage_Feuilles mortes%") 
OR (categorisation LIKE "%Propreté%") 
OR (categorisation LIKE "%Espace Vert:Entretien des massifs:Nettoyage%") 
OR (categorisation LIKE "%Mobilier urbain:Corbeille:Réparation%")) 
AND (confidentialite = "Non")) 

Ich möchte nur die Zeile aus dem letzten Monat zurück. Ich habe BETWEEN fonction versucht, aber mein Feld "dateModification" ist im VARCHAR-Format ("06/02/2012 13:55:09"), also habe ich ein Ergebnis: Verkürzter falscher Datumswert: "06/06/2016 13:55: 09 "

Wie kann ich diese Abfrage ändern, um nur Zeilen aus den letzten 30 Tagen zu haben?

+0

Wow, lernen 'IN()' und 'REGEXP' – sagi

+0

Hinweis: 'str_to_date'. – Blank

+0

Was ist die Frage? – SysDragon

Antwort

0

Verwenden Sie die STR_TO_DATE-Funktion.

SELECT idEcare,reference 
FROM DEMS 
WHERE (((etatSuivant ="Etat_ADM_131276535415392&SURF=Transmis") 
OR (etatSuivant = "Etat_ADM_121276535415390&SURF=Traitement en cours") 
OR (etatSuivant = "Etat_ADM_11276535415374&SURF=A l étude") 
OR (etatSuivant = "Etat_ADM_81276535415384&SURF=Programmé")) 
AND ((categorisation LIKE "%Propreté:Tas sauvage%") 
OR (categorisation LIKE "%Circulation et stationnement:Véhicule gênant%") 
OR (categorisation LIKE "%Circulation et stationnement:Véhicule ventouse_Epave_Brûlé%") 
OR (categorisation LIKE "%Propreté:Passage ponctuel%") 
OR (categorisation LIKE "%Propreté:Corbeille pleine%") 
OR (categorisation LIKE "%Propreté:Huile_Verre cassé%") 
OR (categorisation LIKE "%Propreté:Désherbage_Feuilles mortes%") 
OR (categorisation LIKE "%Propreté%") 
OR (categorisation LIKE "%Espace Vert:Entretien des massifs:Nettoyage%") 
OR (categorisation LIKE "%Mobilier urbain:Corbeille:Réparation%")) 
AND (confidentialite = "Non")) 
AND STR_TO_DATE(dateModification, '%c/%e/%Y %H:%i') BETWEEN '06/02/2012 11:55:09' AND '06/02/2012 19:55:09' 

auch eine mögliche kürzere Version des Codes

SELECT idEcare,reference 
FROM DEMS 
WHERE (((etatSuivant IN ("Etat_ADM_131276535415392&SURF=Transmis", "Etat_ADM_121276535415390&SURF=Traitement en cours", "Etat_ADM_11276535415374&SURF=A l étude", "Etat_ADM_81276535415384&SURF=Programmé"))) 
AND ((categorisation LIKE "%Propreté:Tas sauvage%") 
OR (categorisation LIKE "%Circulation et stationnement:Véhicule gênant%") 
OR (categorisation LIKE "%Circulation et stationnement:Véhicule ventouse_Epave_Brûlé%") 
OR (categorisation LIKE "%Propreté:Passage ponctuel%") 
OR (categorisation LIKE "%Propreté:Corbeille pleine%") 
OR (categorisation LIKE "%Propreté:Huile_Verre cassé%") 
OR (categorisation LIKE "%Propreté:Désherbage_Feuilles mortes%") 
OR (categorisation LIKE "%Propreté%") 
OR (categorisation LIKE "%Espace Vert:Entretien des massifs:Nettoyage%") 
OR (categorisation LIKE "%Mobilier urbain:Corbeille:Réparation%")) 
AND (confidentialite = "Non")) 
AND STR_TO_DATE(dateModification, '%c/%e/%Y %H:%i') BETWEEN '06/02/2012 11:55:09' AND '06/02/2012 19:55:09' 
+0

Thaks für die gemeinsame Zeit. Ich verstehe die STR_TO_DATE, aber ich habe immer noch ein Format Problem: UND STR_TO_DATE (dateModification, '% d /% m /% Y% H:% i ') ZWISCHEN DATE_SUB (CURDATE(), INTERVAL 1 MONAT) UND CURDATE() – Pierrot

1

Scheint OK

SELECT idEcare,reference 
FROM DEMS 
WHERE (((etatSuivant IN ("Etat_ADM_131276535415392&SURF=Transmis", ... 
AND STR_TO_DATE(dateModification, "%d/%m/%Y %H:%i:%s") >= DATE_SUB(NOW(), INTERVAL 1 MONTH) 

Thx Matt