Frage

Ich habe eine ältere SQL Server 2000-Datenbank, die eine Spalte hat, die ein Datum, das als varchar anstelle eines Datum für welchen Gründen auch immer gespeichert. Ich möchte eine Ansicht, die diese Daten machen und mit einem Datetime-Feld anstelle einem varchar einen Bericht gegen das Feld erleichtern machen. Die gute Nachricht ist, dass die meisten der Werte schauen, wie sie direkt in ein Datetime werfen der Lage sein werden.

Natürlich gibt es offenbar einige Felder, die in einer solchen Art und Weise eingegeben wurden, dass sie in Datetime nicht gießbar sind. Nur der Übersichtlichkeit halber, hier ist, wie die Tabelle aussehen:

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

Und der Blick etwas könnte wie folgt aussehen:

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

Gibt es eine Möglichkeit, ich kann:

  1. Hier finden Sie eine Liste mit allen Zeilen, in denen birth kann nicht in ein Datetime in Fall gegossen werden ich es reparieren kann?
  2. In Fällen, in denen ich nicht den Wert reparieren kann, wird der Wert machen als NULL angezeigt oder vielleicht sogar etwas, das offensichtlich nicht die reale birth des Benutzers?
War es hilfreich?

Lösung

Verwenden Sie IsDate ()

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

und

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

Andere Tipps

Überprüfen Sie die T-SQL ISDATE () Funktion

zeigen schlechte Zeilen:

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 ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top