none
nvarchar nach Datetime casten RRS feed

  • Frage

  • Hallo,

    habe in einer import-Tabelle ein Feld insertDatum (datetime) und Erfassungsdatum (nvarchar50)

    Erfassungsdatum hat das Format: YYYY-MM-DD hh:nn:ss

    Das möchte ich nun nach Datetime wandeln und in das Feld insertDatum schreiben.

    Wie mach ich das?

    Andreas


    http://www.AccessBlog.de
    Montag, 29. August 2011 12:29

Antworten

  • hmm, ist eigentlich unwahrscheinlich, aber setzte mal ein SET DATEFORMAT ein:

    DECLARE @Sample TABLE ( textDate NVARCHAR(50) ) ;
    
    INSERT  INTO @Sample
    VALUES  ( '2011-08-30 12:13:14' ) ;
    
    SET DATEFORMAT YMD ;
    
    SELECT  * ,
            CAST(textDate AS DATETIME)
    FROM    @Sample ;

    Ansonsten ist halt tatsächlich kein gültiger Datumswert in deiner NVARCHAR()-Spalte enthalten.

    • Als Antwort markiert Andreas Vogt Montag, 29. August 2011 12:59
    Montag, 29. August 2011 12:50
    Moderator

Alle Antworten

  • Z.B.

    DECLARE @Sample TABLE ( textDate NVARCHAR(50) ) ;
    
    INSERT  INTO @Sample
    VALUES  ( '2011-08-30 12:13:14' ) ;
    
    SELECT  * ,
            CAST(textDate AS DATETIME)
    FROM    @Sample ;
    Montag, 29. August 2011 12:34
    Moderator
  • Hallo Stefan,

    bei obigem Code bekomme ich Fehler:

    "... bei der konvertierung eines nvarchar Datentyps in einen datetime Datentyp liegt der Wert außerhalb des gültigen Bereichs."

    SQL Server 2008 Express

     

    Andreas


    http://www.AccessBlog.de
    Montag, 29. August 2011 12:46
  • hmm, ist eigentlich unwahrscheinlich, aber setzte mal ein SET DATEFORMAT ein:

    DECLARE @Sample TABLE ( textDate NVARCHAR(50) ) ;
    
    INSERT  INTO @Sample
    VALUES  ( '2011-08-30 12:13:14' ) ;
    
    SET DATEFORMAT YMD ;
    
    SELECT  * ,
            CAST(textDate AS DATETIME)
    FROM    @Sample ;

    Ansonsten ist halt tatsächlich kein gültiger Datumswert in deiner NVARCHAR()-Spalte enthalten.

    • Als Antwort markiert Andreas Vogt Montag, 29. August 2011 12:59
    Montag, 29. August 2011 12:50
    Moderator
  • Ist ja lustig, dier SQL Server verlangt nach folgendem Format:

    2011-30-08 12:13:14

    Wie kann ich das Datum in der Query umstellen?

     

    Andreas


    http://www.AccessBlog.de
    Montag, 29. August 2011 12:52
  • OK, das Dateformat YMD hat geholfen, danke.

    Andreas


    http://www.AccessBlog.de
    Montag, 29. August 2011 13:00
  • Ein

    SELECT @@LANGUAGE ;
    EXEC sp_helplanguage ;

    verrät uns sicher auch warum.

    Montag, 29. August 2011 13:00
    Moderator
  • Hallo Andreas,

    da musst Du nicht umstellen und solltest es auch nicht, um keine Abhängigkeiten
    von der eingestellten Benutzersprache zu bekommen, denn daran hängt SET DATEFORMAT.
    Und die ist wiederum in Deutschland (German) üblicherweise DMY.

    Verwende CONVERT mit dem Stil 120, dann geht es auch ohne:

    SELECT CONVERT(datetime, '2011-08-30 12:13:14' , 120)
    

    Ansonsten lies mal: Der ultimative Guide für die Datetime Datentypen

    Gruß Elmar

    Montag, 29. August 2011 13:42
    Beantworter