2 Stimmen

Kann ich eine Liste von Zeilen mit varchar-Werten erhalten, die nicht in datetime umgewandelt werden können?

Ich habe eine ältere SQL Server 2000-Datenbank, die eine Spalte hat, die ein Datum hat, das aus irgendeinem Grund als varchar statt als datetime gespeichert ist. Ich möchte eine Ansicht für diese Daten erstellen und ein datetime-Feld anstelle eines varchar-Feldes verwenden, um die Erstellung eines Berichts für dieses Feld zu vereinfachen. Die gute Nachricht ist, dass Die meisten der Werte sehen so aus, als ob sie direkt in eine Datetime umgewandelt werden könnten.

Natürlich gibt es offensichtlich einige Felder, die so eingegeben wurden, dass sie nicht in datetime umgewandelt werden können. Der Klarheit halber könnte die Tabelle folgendermaßen aussehen:

CREATE TABLE dbo.user
(
    ...
    birthdate varchar(10)
    ...
)

Und die Ansicht könnte etwa so aussehen:

CREATE VIEW dbo.UserView
AS
SELECT ...
       CAST(u.birthdate AS datetime) AS birthdate
       ...
FROM user u
WHERE ...

Gibt es eine Möglichkeit, wie ich das tun kann?

  1. Eine Liste aller Zeilen erhalten, in denen das Geburtsdatum nicht in ein Datum umgewandelt werden kann, damit ich es reparieren kann?
  2. In Fällen, in denen ich den Wert nicht reparieren kann, lassen Sie den Wert als NULL oder vielleicht sogar als etwas, das offensichtlich ist, erscheinen pas das tatsächliche Geburtsdatum des Benutzers?

5voto

Joel Coehoorn Punkte 377088

使用方法 IstDatum()

SELECT birthdate, ' ' _, *
FROM user u
WHERE IsDate(u.bithdate) != 1

et

SELECT ...
   CAST(CASE WHEN IsDate(u.birthdate) = 1 THEN u.birthdate ELSE NULL END AS datetime) AS birthdate
   ...
FROM user u
WHERE ...

2voto

Matthew Jones Punkte 24876

Prüfen Sie die T-SQL ISDATE() Funktion

2voto

KM. Punkte 98297

Schlechte Zeilen anzeigen:

select * from dbo.user where isdate(birthdate)!=1

Ihre Ansicht:

SELECT ...
    CASE
        WHEN isdate(birthdate)=1 THEN CAST(u.birthdate AS datetime)
        ELSE NULL
    END AS Birthday
       ...
FROM user u
WHERE ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X