Zur Zeit wird gefiltert nach: datetime
Filter zurücksetzen

27.05.2010
22:33

SQL Server Datum gem. ISO 8601 parsen

Ich hatte ein kleines Problem, dass sehr schnell Zeit bei der Fehlersuche beanspruchen kann. Das Problem bezog sich bei mir auf einen ETL-Job. Eine Datenquelle liefert nur das Jahr und den Monat. Hiermit müssen schon beim Laden kleine Differenz-Berechnungen gemacht werden. Bevor ich hier eigene Logik entwickle, kam mir die DATEADD-Funktion in den Sinn. Diese Funktion benötigt aber ein Datum.

Je nach Umgebung kann das Datum aus einem String wie zum Beispiel '23.05.2010' im Format 'DD.MM.YYYY' ermittelt werden (DIN 5008), ändert sich aber die Umgebung funktioniert dies nicht mehr. Ein möglicher Ansatz wäre der Tausch von Monat und Tag, damit es wieder funktioniert. Das eigentliche Problem ist damit jedoch nicht behoben, denn wenn im Hintergrund des Ladejobs ein Configuration Repository arbeitet, ist es eine Frage der Zeit, bis ein Fehler auftritt.

T-SQL
DECLARE @Year int,
	@Month int
SET @Year = 2010
SET @Month = 5

SET LANGUAGE GERMAN
PRINT CONVERT(DATETIME,'23.' +  STR(@Month) + '.' + STR(@YEAR))

SET LANGUAGE ENGLISH
-- Fehler out-of-range
PRINT CONVERT(DATETIME,'23.' +  STR(@Month) + '.' + STR(@YEAR))

-- Quick and Dirty Korrektur
PRINT CONVERT(DATETIME, STR(@Month) + '.' + '23.' + STR(@YEAR))

Ausgabe Die Spracheneinstellung wurde auf Deutsch geändert. Mai 23 2010 12:00AM
Changed language setting to us_english. -- Fehler out-of-range Meldung 242, Ebene 16, Status 3, Zeile 11 The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
-- Quick and Dirty Korrektur May 23 2010 12:00AM

Da es umgebungstechnisch mit dem Datum immer ein Problem darstellt, ist die Verwendung des ODBC - Datumsformat 'YYYY-MM-DD 00:00:00.000' empfehlenswert, da es auch der Norm ISO 8601 entspricht. Beim ersten Versuch funktioniert es auch wie erwartet.

T-SQL
DECLARE @Year int,
	@Month int
SET @Year = 2010
SET @Month = 5

SET LANGUAGE ENGLISH
PRINT CONVERT(DATETIME, STR(@Year) + '-' + STR(@Month) + '-1')


Ausgabe Changed language setting to us_english. May 1 2010 12:00AM

Ändert sich jedoch die Umgebung, wird das Datum nicht korrekt wieder gegeben. Damit dieses Problem definitiv behoben werden kann, ist die explizite Angabe beim Konvertieren erforderlich. Für das ODBC-Datum inkl. Millisekunden ist es der Ausdruck 121.

T-SQL
DECLARE @Year int,
	@Month int
SET @Year = 2010
SET @Month = 5

SET LANGUAGE ENGLISH
PRINT CONVERT(DATETIME, STR(@Year) + '-' + STR(@Month) + '-1')

SET LANGUAGE GERMAN
PRINT 'Fehlerhafte Interpretation'
PRINT CONVERT(DATETIME, STR(@Year) + '-' + STR(@Month) + '-1')

PRINT 'PARSE ODBC kanonisch (mit Millisekunden)'
SET LANGUAGE GERMAN
PRINT CONVERT(DATETIME, STR(@Year) + '-' + STR(@Month) + '-1', 121)

SET LANGUAGE ENGLISH
PRINT CONVERT(DATETIME, STR(@Year) + '-' + STR(@Month) + '-1', 121)

Ausgabe Changed language setting to us_english. May 1 2010 12:00AM Die Spracheneinstellung wurde auf Deutsch geändert. Fehlerhafte Interpretation Jan 5 2010 12:00AM PARSE ODBC kanonisch (mit Millisekunden) Die Spracheneinstellung wurde auf Deutsch geändert. Mai 1 2010 12:00AM Changed language setting to us_english. May 1 2010 12:00AM

Zurück

Translate this page

Kategorien

  • [-].NET Development (215)
  • [-]Datenbank (26)
  • HTML (1)
  • Konfiguration (12)
  • Mind Map (10)
  • Off-topic (9)
  • Open Source (3)
  • Qualität (7)
  • Sharepoint (6)
  • Sicherheit (2)

Archiv

Social Bookmarking

Bookmark bei: Mr. Wong Bookmark bei: Webnews Bookmark bei: Icio Bookmark bei: Oneview Bookmark bei: Linkarena Bookmark bei: Favoriten Bookmark bei: Seekxl Bookmark bei: Favit Bookmark bei: Social Bookmarking Tool Bookmark bei: Power Oldie Bookmark bei: Bookmarks.cc Bookmark bei: Newskick Bookmark bei: Newsider Bookmark bei: Linksilo Bookmark bei: Readster Bookmark bei: Folkd Bookmark bei: Yigg Bookmark bei: Digg Bookmark bei: Del.icio.us Bookmark bei: Reddit Bookmark bei: Simpy Bookmark bei: StumbleUpon Bookmark bei: Slashdot Bookmark bei: Netscape Bookmark bei: Furl Bookmark bei: Yahoo Bookmark bei: Spurl Bookmark bei: Google Bookmark bei: Blinklist Bookmark bei: Blogmarks Bookmark bei: Diigo Bookmark bei: Technorati Bookmark bei: Newsvine Bookmark bei: Blinkbits Bookmark bei: Ma.Gnolia Bookmark bei: Smarking Bookmark bei: Netvouz Information