DateDimension SQL SCRIPT

SSanna

Neuer Benutzer
Beiträge
3
Hallo liebe Leute, ich habe ein SQL Script von einer Webseite um ein DataWarehouse zu erstellen.
Es funktioniert auch alles nur habe ich mit einem Script ein Problem.

Ich bekomme folgenden Fehler:

Meldung 242, Ebene 16, Status 3, Zeile 157
Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs.

Das Script habe ich im Anhang hinzugefügt.

Vielen Dank schon ein Mal.

Liebe Grüße,

Sunny
 

Anhänge

  • DateDimensionSQLScript.zip
    5,3 KB · Aufrufe: 2
Werbung:
was ist jetzt die exakte Frage?

Offenbar versuchst Du, einen Text in einen Timestamp umzuwandeln. Offenbar enthält dieser Text einen Wert, der nicht umwandelbar ist - wie z.B. einen 30. Februar oder eine 27. Stunde oder eine 96. Minute.
 
vermutlich wird Deine nächste Frage sein, wie.

Nun, mit M$SQL kenne ich mich nicht so wirklich aus, hier mußt Du selber sehen, was da geht. Vielleicht so, daß Du die fehlerhaften Daten erst einmal als TEXT einliest und dann versuchst, diese zu konvertieren. Demo mit PostgreSQL:

Code:
test=*# \d ssanna ;
  Tabelle »public.ssanna«
 Spalte | Typ  | Attribute
--------+------+-----------
 t  | text |
 d  | date |

\d: überflüssiges Argument »;« ignoriert
test=*# select * from ssanna ;
  t  | d
------------+---
 2016-01-01 |
 2016-02-30 |
 2016-03-30 |
(3 Zeilen)

test=*# update ssanna set d = t::date;
FEHLER:  Datum/Zeit-Feldwert ist außerhalb des gültigen Bereichs: »2016-02-30«
test=*#

Das ist offensichtlich richtig und ein Hinweis darauf, welcher Datensatz falsch ist.
 
Werbung:
Moin moin,

also allein wenn ich mir so eine Codezeile in dem Script anschaue: CONVERT(DATETIME, '12/31/' + CONVERT(VARCHAR, DATEPART(YY, Getdate()))) AS FirstDayOfYear
:confused:

Schau dir einfach mal das Script genauer an dann wirst du feststellen das es mehr als suboptimal ist.

Schau dir mal das Snippet an, damit solltest du weiterkommen ;)

SELECT
DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy,0,getdate()) + 1, -1) AS LastDayOfYear,
DATEADD(yy, DATEDIFF(yy,0,getdate()) + 1, 0) AS FirstOfNextYear,
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy,0,getdate()) + 1, 0)) AS LastTimeOfYear
 
Zurück
Oben