Bei der Betankung von date– und datetime-Datentypen mit einem Datums-String gibt es eine nette Stolperfalle: Die erwarteten Formate unterscheiden sich zwischen date und datetime.
Verwendet man die Notation Y-m-d
, dann verhält sich date wie erwartet und datetime leider nicht:
1 2 3 4 5 6 7 8 9 10 11 |
DECLARE @datum AS date; SET @datum = '2015-12-01'; SELECT DATEPART(month, @datum); -- 12 -- (1 Zeile(n) betroffen) DECLARE @datumzeit AS datetime; SET @datumzeit = '2015-12-01'; SELECT DATEPART(month, @datumzeit); -- 1 -- (1 Zeile(n) betroffen) |
Verwendet man die Notation d.m.Y
, verhalten sich beide Datentypen gleich:
1 2 3 4 5 6 7 8 9 10 11 |
DECLARE @datum AS date; SET @datum = '01.12.2015'; SELECT DATEPART(month, @datum); -- 12 -- (1 Zeile(n) betroffen) DECLARE @datumzeit AS datetime; SET @datumzeit = '01.12.2015'; SELECT DATEPART(month, @datumzeit); -- 12 -- (1 Zeile(n) betroffen) |
Bei der Gelegenheit sei auf „Der ultimative Guide für die Datetime Datentypen“ (Originaltext) verwiesen.