Vergleichen Sie Daten in MySQL

91

Ich möchte ein Datum aus einer Datenbank vergleichen, das zwischen zwei angegebenen Daten liegt. Die Spalte aus der Datenbank ist DATETIME, und ich möchte sie nur mit dem Datumsformat vergleichen, nicht mit dem Datum / Uhrzeit-Format.

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 erhalte diesen Fehler, wenn ich die obige SQL ausführe:

Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für 'us_reg_date, 120)> =' 2000-07-05 'AND CONVERT (CHAR (10), us_reg_date, 120) <=' 2011- 'at Linie 1

Wie kann dieses Problem behoben werden?

NVG
quelle

Antworten:

94

Sie können versuchen, unten Abfrage,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)
Nik
quelle
37
Für Leute, die von Google kommen: Der Datumstyp in MySQL ist im Format JJJJ-MM-TT.
Błażej Michalik
85

Dies ist die SQL Server-Syntax zum Konvertieren eines Datums in eine Zeichenfolge. In MySQL können Sie die DATE- Funktion verwenden, um das Datum aus einer Datums- / Uhrzeitangabe zu extrahieren:

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

Wenn Sie jedoch einen Index für die Spalte nutzen us_reg_datemöchten, können Sie dies stattdessen versuchen:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day
Mark Byers
quelle
1
Ich freue mich über Ihre Überlegung, den Index zu nutzen. Ich denke, die Abfrage sollte nicht die Klausel "+ Intervall 1 Tag" enthalten.
Jürgenfd
10

Das funktioniert bei mir:

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.

Rahatur
quelle
6

Hey Leute, 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')
Gurjeet Singh
quelle
1

das hat bei mir funktioniert:

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 (Spalte '% d /% m /% Y') von früheren Lösungen ändern musste, da das Laden ewig dauerte

Iria
quelle