Benutzer mit den meisten Antworten
Problem mit Datumsformat

Frage
-
Hallo,
ich habe Flatfiles in den SQL-Server2008 eingelesen, da beim Einlesen der einen Datumsspalte immer eine Fehlermeldung kam, habe ich diese zunächst als String eingelesen. Die in der Spalte stehenden Daten haben das Format:
19OCT2007
12OCT2007
19DEC2007
nun habe ich versucht mit SET LANGUAGE 'english' und SET DATEFORMAT 'dmy' das Datumsformat für die ganze DB anzupassen und anschließend die Datumsspalte auf date zu setzen. Dabei bekomme ich jedoch die Fehlermeldung "Fehler beim Konvertieren einer Zeichenfolge in ein Datum/Uhrzeit".
Wäre schön wenn jemand Rat weiß!
VG HAgen
Antworten
-
Wie wäre es hiermit?
SET LANGUAGE 'english'; SET NOCOUNT ON; DECLARE @t TABLE ( c1 varchar(20), d1 datetime ); INSERT INTO @t(c1) SELECT '19OCT2007' UNION ALL SELECT '12OCT2007' UNION ALL SELECT '19DEC2007'; UPDATE @t SET d1 = CAST( SUBSTRING(c1, 1, 2) + ' ' + SUBSTRING(c1, 3, 3) + ' ' + SUBSTRING(c1, 6, 4) AS datetime); SELECT * FROM @t; 19OCT2007 2007-10-19 00:00:00.000 12OCT2007 2007-10-12 00:00:00.000 19DEC2007 2007-12-19 00:00:00.000
-- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 7. Januar 2010 23:33
Alle Antworten
-
Hallo HAgen,
benutze
SUBSTRING(datestring,1,2) As DatePartDay, SUBSTRING(datestring,3,3) as DatePartMonth, SUBSTRING(datestring,6,4) as DatePartYear um das dann wieder als "normales" Datum zusammen zu setzen.
select
case
when DatePartMonth = 'DEC' then 12
when DatePartMonth = 'OCT' then 10
etc...
Beste Grüße
Lars
lp -
Erstmal vielen Dank für Deine schnelle Anwort. Ich beschäftige mich eigentlich erst seit einer Woche(unibedingt) mit dem SQL-Server und eigentlich sollte er nur als Datenquelle für ein kleines BI-Projekt benutzt werden(bis jetzt haben wir aber nichtmal das hinbekommen:-)).
Die Querys die Du angibst sollen sicher als neue Abfrage erstellt werden also dann in etwa so:?
select
SUBSTRING(dbo.x.Datumsspalte,3,3) as DatePartMonth
case
when DatePartMonth = 'DEC' then 12
when DatePartMonth = 'OCT' then 10
etc...
FROM dbo.x
select
SUBSTRING(dbo.x.Datumsspalte,1,2) As DatePartDay
FROM dbo.x
Anschließend kriege ich sicher ein Ergebnis in der Art(spaltenweise):DatePartMonth | DatePartDay | DatePartYear?
so und daraus muss ich eine neue Spalte in der Tabelle dbo.x machen? Wie stelle ich das dann an?
Sr. falls die Fragen ein bißchen blöd sind. :-)
VG HAgen -
Wie wäre es hiermit?
SET LANGUAGE 'english'; SET NOCOUNT ON; DECLARE @t TABLE ( c1 varchar(20), d1 datetime ); INSERT INTO @t(c1) SELECT '19OCT2007' UNION ALL SELECT '12OCT2007' UNION ALL SELECT '19DEC2007'; UPDATE @t SET d1 = CAST( SUBSTRING(c1, 1, 2) + ' ' + SUBSTRING(c1, 3, 3) + ' ' + SUBSTRING(c1, 6, 4) AS datetime); SELECT * FROM @t; 19OCT2007 2007-10-19 00:00:00.000 12OCT2007 2007-10-12 00:00:00.000 19DEC2007 2007-12-19 00:00:00.000
-- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 7. Januar 2010 23:33