Vergleich von gespeicherten Daten als varchar

Ich brauche zum vergleichen von Daten, die gespeichert sind in meine Datenbank als varchar gegen das heutige Datum.

Speziell, ich brauche, um auszuschließen, werden alle Datensätze mit einem Datum vergangen ist.

Habe ich versucht:

SELECT * FROM tblServiceUsersSchedule 
WHERE ScheduleEndDate !='' AND ScheduleEndDate < '2015/05/31'

Diese ausgewählten Werte wie 17/06/2012 und 19/04/2015, die beide bereits übergeben, zusammen mit 01/06/2015 welche nicht.

Ich habe dann versucht, Stimmen die Daten mit:

SELECT * 
FROM   tblServiceUsersSchedule 
WHERE  CAST(ScheduleEndDate as DATETIME)  < CAST('05/31/2015' as DATETIME) AND ScheduleEndDate !='' AND ScheduleEndDate is not null

Bekam aber folgenden Fehler:

Die coversion eines varchar-Datentyps in einen datetime-Datentyp führte
in einer out-of-range-Wert.

Ich die Daten überprüft hat, hinter sich und keine null, keine leere weiße Fläche. Alle Datumsangaben im format TT/mm/JJJJ.

Ich kann nicht herausfinden, wie zu vergleichen, die varchar Datum gespeichert mit dem heutigen Datum.

  • Sie erklärt haben, genau die Art von problem, warum die Speicherung von Daten, die als eine varchar ist eine schreckliche Praxis. Sollten Sie aktualisieren Sie Ihre Datenbank-schema zu verwenden date, datetime, datetime2 oder datetimeoffset als angemessen. Jede Antwort, die unten gegeben werden, auch diejenigen, die arbeiten, wird das Ergebnis in eine non-sargable Abfragen - das bedeutet, Sie können verwenden einen index. Je größer die Tabelle, desto schlechter wird die Leistung - wie es immer zu prüfen, jede Zeile der Tabelle zur Beantwortung Ihrer Anfrage. Verwenden Sie die richtige Art und vermeiden das problem.
  • Ich habe mich entschieden, varchar, wie manchmal das Datum 01/01/1900 (oder so ähnlich) eingefügt würde. Ich wusste, es war nicht ideal an der Zeit, aber fühlt sich irgendwie gebunden, um es jetzt
  • Ich bin mir nicht sicher, warum Sie denken, würde eine date Spalte nicht halten konnten 01/01/1900. Oder wenn Sie bedeutet, dass müssen Sie möglicherweise einen nicht-Wert, das ist es, was nullable Spalten sind für.
InformationsquelleAutor Josh Cooper | 2015-05-31
Schreibe einen Kommentar