Announcement

Collapse
No announcement yet.

Fehler bei Datumskonversion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler bei Datumskonversion

    Hi,

    Vielleicht stehe ich ja einfach nur auf dem Schlauch und sehe das offensichtliche nicht, aber bei der Abfrage
    [highlight=sql]
    SELECT BenutzerInBearbeitung,
    DatumInBearbeitung,
    DATEDIFF(minute, DatumInBearbeitung, '2010-03-24 10:20:14') AS Differenz
    FROM SperrenAuftraege WITH (NOLOCK)
    WHERE AuftragID = 1777[/highlight] (soll prüfen, von wem und wie lange ein Datensatz schon gesperrt ist) erhalte ich eine Exception "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."

    Dass die Millisekunden nicht angegeben sind (also 2010-03-24 10:20:14.000) sollte eigentlich nichts ausmachen, und wenn ich eine normale Abfrage nach DatumInBearbeitung mache, wird mir das Datum auch in der Schreibweise yyyy-MM-dd hh:mm:ss.000 zurückgegeben. Das seltsamste dabei ist, der SQL-String wird von einem Programm zusammengesetzt, das bei anderen Anwendern zu funktionieren scheint.

    Die Datenbank ist eine SQLServer 2000-DB, nur falls die Version wichtig sein sollte...

    Was ist da los?

    Gruß
    Martin Dietz
    Zuletzt editiert von M.Dietz; 24.03.2010, 11:57. Reason: sql-Formatierung

  • #2
    Kannst du keine parametrisierten Abfragen verwenden? Dort treten solche Probleme nicht auf.

    Comment


    • #3
      In meinem eigenen Programm bin ich gerade dabei, die Abfragen auf parametrisierte Abfragen umzustellen, das Problem tritt momentan in einem Programm auf, das ich nur als Urlaubsvertretung betreue, daher kann ich da keine derart enorme Umstellung einfach mal so veranlassen.

      Außerdem stellt das nicht klar, weshalb die Konvertierung fehlschlägt, hilft also nur für das Programm selbst, ein Debugging der SQL-Texte im Enterprise Manager (oder "SQL Server Management Tool" wie es es ja jetzt heißt) ist dann unmöglich. Ich habe mal versucht die Kommandos
      [highlight=sql]
      Declare @pNow Datetime
      Set @pNow = Convert(Datetime,'2010-03-24 11:11:36')
      SELECT BenutzerInBearbeitung, DatumInBearbeitung, DATEDIFF(minute, DatumInBearbeitung,@pNow) AS Differenz FROM SperrenAuftraege WITH (NOLOCK) WHERE AuftragID = 1777
      [/highlight]
      auszuführen, auch das scheitert an der Konvertierung.

      Mal davon abgesehen, könnte der Code in dem Moment wo er die aktuelle Zeit einträgt, auch SYSDATETIME() nutzen, um eine Konvertierung für den SQL-Ausdruck komplett zu vermeiden, dann ist er aber glaube ich wieder nicht mehr datenbankunabhängig, in Access hieß das noch Now, das kapiert aber Transact-SQL anscheinend nicht (invalid ColumnName 'NOW' bzw. 'NOW' is not a recognized function name.)

      Und die vielleicht entscheidende Frage, um der Ursache auf den Zahn zu fühlen ist, wieso schlägt das nur bei mir fehl? Ist es die Funktion Date.ToString("yyyy\-MM\-dd HH\:mm\:ss"), die bei mir einen anderen Datumsstring zusammensetzt, oder reagiert der SQL-Server bei mir anders?

      Comment


      • #4
        Du musst beim CONVERT angeben, um welches Datumsformat es sich handelt.
        Hier ist es ODBC kanonisch, das ist Typ 120:

        [highlight=SQL]Declare @pNow Datetime
        SET @pNow = Convert(Datetime,'2010-03-24 11:11:36', 120)
        SELECT @pNow[/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment

        Working...
        X