Ошибка происходит на первом этапе, потому что @d
объявляется как datetime
, а не как строка (если ваши настройки интернационализации не позволяют это). Я думаю, что вы намерены:
declare @d varchar(255)
set @d = '31/12/2019 16:12:25.317';
select convert(date, @d, 103)
Как правило, при установке констант даты и времени следует использовать:
declare @d datetime;
set @d = '2019-12-31T16:12:25.317';
Это независимый от местоположения метод определения даты / времени в SQL Server. Предостережение: хотя это правильный метод, я обычно опускаю T
для совместимости с другими базами данных (и он все еще работает всегда или почти всегда).