-- How most date/time formats are unsafe -- Let's check the language of my session: SET LANGUAGE us_english; PRINT @@LANGUAGE; -- Then we can see how [`us_english`] interprets various settings. First, April 12th / 20th: SELECT [April_12_1] = CONVERT(datetime, '04/12/2020'), -- mm/dd/yyyy [April_12_2] = CONVERT(datetime, '2020-04-12'), -- yyyy-mm-dd (ISO 8601) [April_12_3] = CONVERT(datetime, '20200412'), -- yyyymmdd [April_20_1] = CONVERT(datetime, '04/20/2020'), [April_20_2] = CONVERT(datetime, '2020-04-20'), [April_20_3] = CONVERT(datetime, '20200420'); -- And formats that include time: SELECT [April_12_a] = CONVERT(datetime, '2020-04-12 04:00:00'), -- yyyy-mm-dd hh:mm:ss[.nnn] [April_12_b] = CONVERT(datetime, '2020-04-12T04:00:00'), -- yyyy-mm-ddThh:mm:ss[.nnn] [April_12_c] = CONVERT(datetime, '20200412 04:00:00'), -- yyyymmdd hh:mm:ss[.nnn] [April_20_a] = CONVERT(datetime, '2020-04-20 04:00:00'), [April_20_b] = CONVERT(datetime, '2020-04-20T04:00:00'), [April_20_c] = CONVERT(datetime, '20200420 04:00:00'); -- Then what happens if a user has different language settings? SET LANGUAGE français; SELECT [April_12_1] = CONVERT(datetime, '04/12/2020'), -- December 4th! [April_12_2] = CONVERT(datetime, '2020-04-12'), -- December 4th! [April_12_3] = CONVERT(datetime, '20200412'); -- April 12th -- That's just wrong data, and you have no idea. -- And silently wrong data is arguably worse than errors, but neither is good: SET LANGUAGE français; SELECT [April_20_1] = CONVERT(datetime, '04/20/2020'); -- Error! SELECT [April_20_2] = CONVERT(datetime, '2020-04-20'); -- Error! SELECT [April_20_3] = CONVERT(datetime, '20200420'); -- April 12th -- Or NULLs, if you use [`TRY_CONVERT`]: SET LANGUAGE français; SELECT [April_20_1] = TRY_CONVERT(datetime, '04/20/2020'), -- NULL [April_20_2] = TRY_CONVERT(datetime, '2020-04-20'), -- NULL [April_20_3] = TRY_CONVERT(datetime, '20200420'); -- April 20th -- And wrong data again, sometimes, if including time and the dates transpose correctly: SET LANGUAGE français; SELECT [April_12_a] = TRY_CONVERT(datetime, '2020-04-12 04:00:00'), -- December 4th! [April_12_b] = TRY_CONVERT(datetime, '2020-04-12T04:00:00'), -- April 12th [April_12_c] = TRY_CONVERT(datetime, '20200412 04:00:00'); -- April 12th -- Or errors, if the days can't transpose correctly: SET LANGUAGE français; SELECT [April_20_a] = CONVERT(datetime, '2020-04-20 04:00:00'); -- Error! GO SELECT [April_20_b] = CONVERT(datetime, '2020-04-20T04:00:00'), -- April 12th [April_20_c] = CONVERT(datetime, '20200420 04:00:00'); -- April 12th