По сути, моя идея такова:
1, сначала использовать 0 в качестве секунд,
2, добавить секунды из SnM (секунды и миллисекунды)
3, добавитьМиллисекунды от SnM.
Будьте осторожны с проблемой преобразования типов данных ...
Попробуйте:
select
dateadd(millisecond, cast(reverse(substring(reverse(cast(cast (SnM as decimal(10,3)) as varchar(50))),1,3)) as int),
dateadd(second, cast(substring(cast(cast (SnM as decimal(10,3)) as varchar(50)),1,charindex('.',cast(cast (SnM as decimal(10,3)) as varchar(50)))-1) as int),
cast(concat(year,'-',month,'-',day,' ',hour,':',minute,':00') as datetime2))) as newdate
from test
Результат теста:
SQL <> Fiddle