none
Problem mit Datumsformat RRS feed

  • Frage

  • Hallo,

    ich habe Flatfiles in den SQL-Server2008 eingelesen, da beim Einlesen der einen Datumsspalte immer eine Fehlermeldung kam, habe ich diese zunächst als String eingelesen. Die in der Spalte stehenden Daten haben das Format:
    19OCT2007
    12OCT2007 
    19DEC2007 

    nun habe ich versucht mit SET LANGUAGE 'english' und SET DATEFORMAT 'dmy' das Datumsformat für die ganze DB anzupassen und anschließend die Datumsspalte auf date zu setzen. Dabei bekomme ich jedoch die Fehlermeldung "Fehler beim Konvertieren einer Zeichenfolge in ein Datum/Uhrzeit".

    Wäre schön wenn jemand Rat weiß!

    VG HAgen
    Freitag, 23. Oktober 2009 20:57

Antworten

  • Wie wäre es hiermit?
    SET LANGUAGE 'english';
    
    SET NOCOUNT ON;
    
    DECLARE @t TABLE
    (
        c1 varchar(20),
        d1 datetime
    );
    
    INSERT INTO @t(c1)
    SELECT '19OCT2007' UNION ALL
    SELECT '12OCT2007' UNION ALL
    SELECT '19DEC2007';
    
    UPDATE @t
        SET
        d1 =
        CAST(
            SUBSTRING(c1, 1, 2) +  ' ' +
            SUBSTRING(c1, 3, 3) +  ' ' +
            SUBSTRING(c1, 6, 4)
        AS datetime);
    
    SELECT
        *
    FROM
        @t;
    
    19OCT2007    2007-10-19 00:00:00.000
    12OCT2007    2007-10-12 00:00:00.000
    19DEC2007    2007-12-19 00:00:00.000
    


    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Montag, 26. Oktober 2009 11:23

Alle Antworten

  • Hallo HAgen,

    benutze

    SUBSTRING(datestring,1,2) As DatePartDay, SUBSTRING(datestring,3,3)  as DatePartMonth, SUBSTRING(datestring,6,4)   as DatePartYear  um das dann wieder als "normales" Datum zusammen zu setzen.

    select

    case
       when DatePartMonth = 'DEC' then 12
       when DatePartMonth = 'OCT' then 10 
       etc...


    Beste Grüße
    Lars






    lp
    Freitag, 23. Oktober 2009 21:17
  • Erstmal vielen Dank für Deine schnelle Anwort. Ich beschäftige mich eigentlich erst seit einer Woche(unibedingt) mit dem SQL-Server und eigentlich sollte er nur als Datenquelle für ein kleines BI-Projekt benutzt werden(bis jetzt haben wir aber nichtmal das hinbekommen:-)).

    Die Querys die Du angibst sollen sicher als neue Abfrage erstellt werden also dann in etwa so:?

    select
    SUBSTRING(dbo.x.Datumsspalte,3,3) as DatePartMonth
    case
       when DatePartMonth = 'DEC' then 12
       when DatePartMonth = 'OCT' then 10 
       etc...
    FROM dbo.x

    select
    SUBSTRING(dbo.x.Datumsspalte,1,2) As DatePartDay
    FROM dbo.x

    Anschließend kriege ich sicher ein Ergebnis in der Art(spaltenweise):DatePartMonth |  DatePartDay | DatePartYear?

    so und daraus muss ich eine neue Spalte in der Tabelle dbo.x machen? Wie stelle ich das dann an?
    Sr. falls die Fragen ein bißchen blöd sind. :-)

    VG HAgen
    Freitag, 23. Oktober 2009 21:50
  • Wie wäre es hiermit?
    SET LANGUAGE 'english';
    
    SET NOCOUNT ON;
    
    DECLARE @t TABLE
    (
        c1 varchar(20),
        d1 datetime
    );
    
    INSERT INTO @t(c1)
    SELECT '19OCT2007' UNION ALL
    SELECT '12OCT2007' UNION ALL
    SELECT '19DEC2007';
    
    UPDATE @t
        SET
        d1 =
        CAST(
            SUBSTRING(c1, 1, 2) +  ' ' +
            SUBSTRING(c1, 3, 3) +  ' ' +
            SUBSTRING(c1, 6, 4)
        AS datetime);
    
    SELECT
        *
    FROM
        @t;
    
    19OCT2007    2007-10-19 00:00:00.000
    12OCT2007    2007-10-12 00:00:00.000
    19DEC2007    2007-12-19 00:00:00.000
    


    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Montag, 26. Oktober 2009 11:23