I recently had a scary conversation with a user, which can be broken down to:
User: Why would the data have customers with a birth date of MM/DD/2020?
Me: What are you talking about? Lemme take a look.
Me again, this time with a changed voice: Umm, Umm, i plead guilty with an explanation your honor!
User: Let’s hear your explanation son.
Me: We receive a raw file with customer data. Date of birth is a field in that file, and it is supposed to contain data in ‘DD-Month-YYYY’ format. But, apparently, one fine day the file contained two digits for year instead of four. My import process decided that the two digit year 20 is 2020 and not 1920.
User: Okay, I’ll let you go this time, but fix it. Won’t you?
<end of story>.
Turns out, SQL Server automatically uses current century for two digit years less than 50, and previous century for years greater than or equal to 50.
SELECT CAST('01-January-49' AS DATETIME) [<50]
Result:
<50
———————–
2049-01-01 00:00:00.000
(1 row(s) affected)
SELECT CAST('01-January-50' AS DATETIME) [>50]
Result:
<50
———————–
1950-01-01 00:00:00.000
(1 row(s) affected)
Here is the books online explanation for the two digit year cutoff. Benjamin Nevarez (t|b) pointed me to this link when i asked for help on twitter using the #sqlhelp hashtag. Thanks Benjamin.
Cheers!
You will also like If i learn something, sorry, but you have to read it!