In einer Datenbanktabelle habe ich ein Datumsattribut erstellt, aber den Typ auf varchar gesetzt und nicht Date. Meine Frage lautet: Kann ich solche Daten in einer SQL-Abfrage weiterhin vergleichen?

Daten in meiner Datenbank werden in diesem Format gespeichert:

TT / MM / JJJJ HH: MM: SS

Ich muss eine SQL-Abfrage in PHP durchführen, die ungefähr so aussieht:

SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015"; 

„Datum“ sieht folgendermaßen aus: 07/08/2015 15:15:02

Ich würde mich über ein Beispiel freuen, wie

Kommentare

  • Bitte bearbeiten und taggen Sie Ihre Frage , um uns mitzuteilen, welches Datenbankprodukt Sie verwenden (z. B. MySQL und Version). Gibt es einen Grund, warum Sie die Tabellendefinition jetzt nicht ändern können, da es so gut wie immer besser ist, Datumsangaben als dates anstatt als Zeichenfolgen zu speichern? Oder bitten Sie auch um Hilfe?
  • Können Sie das Datumsattribut in Datum / Uhrzeit ändern? Das Speichern von Daten als Varchar ist problematisch. Sie werden auf Situationen stoßen, in denen Daten gespeichert werden, die kein gültiges Datum sind. Sie werden auch kontinuierlich zu und von datetime konvertieren.

Antwort

Je nachdem, welche Datenbank Sie verwenden, Sie sollten in der Lage sein, die Zeichenfolge auf ein Datum umzustellen und dann Ihren Vergleich durchzuführen.

dh in SQL Server

cast(date as datetime) >= "20150131" ... 

Allerdings würde ich normalerweise empfehlen, das Datum als Datum zu speichern, wenn dies überhaupt möglich ist und wenn Sie Zeichenfolgen verwenden müssen. Es ist am besten, ein standardisierteres Format

zu verwenden, d. H. "YYYY-mm-dd" oder noch besser "YYYYmmdd" anstelle von "mm/dd/YYYY", die beispielsweise leicht gemischt werden können mit "dd/mm/YYYY", was in vielen Kulturen üblich ist. Siehe diesen Blog-Beitrag: Schlechte Gewohnheiten: Misshandlung von Datums- / Bereichsabfragen

Kommentare

  • und es wird normalerweise empfohlen, ' ein Standard-fromat für Daten zu verwenden, wie 'YYYY-mm-dd' oder noch besser 'YYYYmmdd' und nicht die 'mm/dd/YYYY', die mehrdeutig ist und deren Interpretation durch SQL-Server von den lokalen Einstellungen abhängt.
  • @ypercube, Einverstanden , aktualisiert.

Antwort

Es gibt eine Frage zu „Welche Datenbank verwenden Sie?“

Jedes RDBMS hat seine eigene Art, das Problem zu behandeln.

Wenn es sich um MySQL handelt, verwenden Sie str_to_date:

https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

Dadurch wird ein Varchar in ein Datum konvertiert und das Datum kann korrekt sortiert werden. Das Sortieren eines Datums als Varchar-Datentyp führt zu unerwartetem Verhalten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.