Datumsformate

ukulele

Datenbank-Guru
Beiträge
4.579
select convert(varchar,getdate(),121)
Ergebnis: 2011-03-30 09:24:19.737

select cast('2011-03-30 09:24:19.737' as datetime)
Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs.

select cast('2011-30-03 09:24:19.737' as datetime), also yyyy-dd-mm... würde gehen. Gibts wirklich kein entsprechendes Ausgabeformat? Natürlich kann ich es von Hand per datepart zusammensetzen, aber schön ist das nicht.
 
Werbung:

Charly

Datenbank-Guru
Beiträge
306
Hallo ukulele,

Hier ein paar Ansätze für Datumsformate:)

--Deutsches Datum
select convert(varchar,getdate(),4)
= 30.03.11
select convert(varchar,getdate(),104)
= 30.03.2011

--Englisches Datum

select convert(varchar,getdate(),1)
= 03/30/11
select convert(varchar,getdate(),101)
= 03/30/2011

[EDIT]
Für eine Zeichenfolge würde so was gehen:
select convert(nvarchar,convert(datetime,'2011-30-03 09:24:19.737'),4)
oder
select convert(nvarchar,cast('2011-30-03 09:24:19.737' as datetime),4)

Gruß Charly
 

ukulele

Datenbank-Guru
Beiträge
4.579
Hilft mir leider nicht, trotzdem danke.

Hier mal mein alter Code der das Problem aufwarf:

Code:
                SET        @anfangsdatum =    cast(    left(convert(varchar@anfangsdatum,121),11)
                                                 isnull(@anfangsstunde,'00') + ':' +
                                                 isnull(@anfangsminute,'00') + ':00.000' AS DATETIME)

So gehts dann auch:

Code:
                SET        @anfangsdatum =    cast(    cast(datepart(yyyy,@anfangsdatum) AS CHAR(4)) + '-' + 
                                                cast(datepart(dd,@anfangsdatum) AS CHAR(2)) + '-' + 
                                                cast(datepart(mm,@anfangsdatum) AS CHAR(2)) + ' ' +
                                                isnull(@anfangsstunde,'00') + ':' +
                                                isnull(@anfangsminute,'00') + ':00.000' AS DATETIME)
 

Charly

Datenbank-Guru
Beiträge
306
Hallo ukulele,

das Format soll also so sein:
yyyy-dd-mm hh:mi:ss.mmm
oder geht auch:
yyyy-mm-dd hh:mi:ss.mmm

Gruß Charly
 

ukulele

Datenbank-Guru
Beiträge
4.579
Mein oberster Code spuckt yyyy-mm-dd hh:mi:ss.mmm mit convert(varchar@anfangsdatum,121) aus. Der wird abgeschnitten, Stunde und Minute angehängt und dann versucht er das per cast wieder in datetime zu wandeln. Geht aber nur, wenns als yyyy-dd-mm hh:mi:ss.mmm vorliegt. Und dafür gibts kein Ausgabeformat oder doch? Die 121 steht ja für mm-dd
 

Charly

Datenbank-Guru
Beiträge
306
Hallo ukulele,

wenn Du die Sprache auf us_english stellst funktioniert dein Select.

SET LANGUAGE N'us_english'
GO

select cast('2011-03-30 09:24:19.737' as datetime)

Hoffe das hilft Dir weiter

[EDIT]
Ist zwar nur für die aktuelle Session aber man weis ja nie...

SET LANGUAGE N'Deutsch'
GO

Gruß Charly
 

ukulele

Datenbank-Guru
Beiträge
4.579
Aber du stimmst mir sicher zu das das nicht das Gelbe vom Ei ist oder? Abgesehen davon tritt das Problem im Trigger auf, da geh ich dann doch lieber den komplizierteren weg, siehe Lösung 2.
 
Werbung:

Charly

Datenbank-Guru
Beiträge
306
Bei einem Trigger hätte ich jetzt auch bedenken. Ich weis gar nicht ob das innerhalb eines Triggers läuft.

Aber sonst. Alles was geht wird auch gemacht.
biggrin.png


Gruß Charly
 
Oben