2010-09-06 13 views
57

Ich möchte ein Datum aus einer Datenbank vergleichen, die zwischen 2 angegebenen Daten liegt. Die Spalte aus der Datenbank ist DATETIME, und ich möchte es nur mit dem Datumsformat vergleichen, nicht mit dem Datetime-Format.Daten in MySQL vergleichen

SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10' 

Ich bekomme diese Fehlermeldung, wenn ich die SQL oben ausführen:

Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in der Bedienungsanleitung für die richtige Syntax MySQL-Server-Version entspricht verwenden in der Nähe von ‚us_reg_date, 120)> = '2000.07.05' AND CONVERT (CHAR (10), us_reg_date, 120) < = '2011-' in Zeile 1

Wie kann dieses Problem behoben werden?

Antwort

58

Sie unter Abfrage versuchen können,

select * from players 
where 
    us_reg_date between '2000-07-05' 
and 
    DATE_ADD('2011-11-10',INTERVAL 1 DAY) 
+12

Für Leute, die von Google kommen: Datum Typ in MySQL kommt im JJJJ-MM-TT-Format. –

67

Das ist SQL Server syntax zum Konvertieren eines Datums in eine Zeichenfolge. In MySQL können Sie die DATE Funktion das Datum aus einem Datumzeit zu extrahieren:

SELECT * 
FROM players 
WHERE DATE(us_reg_date) BETWEEN '2000-07-05' AND '2011-11-10' 

Aber wenn Sie die Vorteile eines Index für die Spalte nehmen wollen us_reg_date Sie könnte dies wollen, anstatt versuchen:

SELECT * 
FROM players 
WHERE us_reg_date >= '2000-07-05' 
    AND us_reg_date < '2011-11-10' + interval 1 day 
+1

Ich schätze Ihre Berücksichtigung der Nutzung des Index. Ich denke, die Abfrage sollte nicht die Klausel "+ Intervall 1 Tag" haben. – Jurgenfd

6

Dies funktioniert für mich:

select date_format(date(starttime),'%Y-%m-%d') from data 
where date(starttime) >= date '2012-11-02'; 

Beachten Sie die Formatzeichenfolge '% Y-% m-% d' und das Format des Eingabedatums.

5

hey jungs danke für deine hilfe ich habe die antwort bekommen.

hier ist der Code .......

SELECT * FROM table 
WHERE STR_TO_DATE(column, '%d/%m/%Y') 
    BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y') 
    AND STR_TO_DATE('07/10/15', '%d/%m/%Y') 
0

das ist, was es für mich gearbeitet:

select * from table 
where column 
BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y') 
AND STR_TO_DATE('07/10/15', '%d/%m/%Y') 

Bitte,

beachten Sie, dass ich STR_TO_DATE ändern musste (Spalte " % d /% m /% Y ') von vorherigen Lösungen, wie es dauerte, um zu laden