Announcement

Collapse
No announcement yet.

char zu datetime casten

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

  • char zu datetime casten

    Hallo zusammen,

    ich habe eine große SQL Abfrage welche mir immer einen Fehler bringt.
    Ich arbeite mit dem SQL Server 2000 und lass mir die Abfrage testweise in dem SQL Query Analyzer ausgeben.

    Dabei kommt immer folgender Fehler:
    Server: Nachr.-Nr. 8115, Schweregrad 16, Status 2, Zeile 1
    Arithmetischer Überlauffehler beim Konvertieren von expression in den Datentyp datetime.

    Ich habe schon eine ganze Weile gegoogelt aber nicht wirklich eine Lösung gefunden. Ich habe irgend ein Fehler in der Syntax bezüglich des Cast/Convert.

    Konnte den Fehler der SQL Abfrage auf folgenden String begrenzen:

    cast(CASE WHEN len(CAST(dbo.AUK.EAUFDT AS nvarchar)) = 5 THEN '0' + CAST(dbo.AUK.EAUFDT AS nvarchar) ELSE '070099' END AS datetime(4)) AS AuftragsDatum

    Das EAUFDT ist folgendermaßen in meiner Datenbank: Beispiel-> '07' (Jahr)
    '01' (Monat)
    '14' (Tag)
    ---> 070114... die 0 fehlt jedoch weil es eine führende 0 ist, das wäre egal, könnte ich ja korregieren aber der cast ist irgendwie falsch.

    Könntet ihr mir irgendein Tipp geben, was ich versuche könnte?

    Danke schon mal im voraus!

    Gruß
    teeboar

  • #2
    Wie soll denn '070099' convertiert werden

    Originally posted by teeboar View Post
    cast(CASE WHEN len(CAST(dbo.AUK.EAUFDT AS nvarchar)) = 5 THEN '0' + CAST(dbo.AUK.EAUFDT AS nvarchar) ELSE '070099' END AS datetime(4)) AS AuftragsDatum

    Das EAUFDT ist folgendermaßen in meiner Datenbank: Beispiel-> '07' (Jahr)
    '01' (Monat)
    '14' (Tag)
    ---> 070114...
    99ster tag des nullten Monats

    Comment


    • #3
      Okay, sollte nur defaultmäßig geschrieben werden damit es später in der WHERE klausel herausfällt.

      Hab es korrigiert mit einem tatsächlichen Datum, bringt aber immer noch der gleiche Fehler, ist die Syntax richtig?

      Danke!
      Gruß teeboar

      Comment


      • #4
        Wenn das MS-Sql ist versuch mal mit Convert
        (siehe BOL für Syntax)

        Comment


        • #5
          Hallo,

          wie der folgende Test zeigt, kann die CAST-Funktion vom MS SQL Server 2005 mit den beiden Fällen (vollständiges und abgekürztes Jahr) umgehen:
          [highlight=SQL]
          -- Test A:
          SELECT CAST('20080311' AS DATETIME) AS Datum
          -- Test B:
          SELECT CAST('080311' AS DATETIME) AS Datum
          [/highlight]
          Allerdings muss eine Zeichenkette übergeben werden, bei einem Zahlenwert entsteht Müll, der im Worst Case tatsächlich zu einem Überlauf führt:
          [highlight=SQL]
          -- Achtung: Hier entsteht Müll!
          SELECT CAST(080311 AS DATETIME) AS Datum
          [/highlight]

          Comment

          Working...
          X