Будьте осторожны, используйте datetime2
, если вам действительно нужна точность до одной миллисекунды.
select format(SSD, 'hh:mm:ss.fff'), format(SED, 'hh:mm:ss.fff'), S
from T cross apply (
values
( dateadd(millisecond, ST1, DT), dateadd(millisecond, T1, DT), 1 ),
( dateadd(millisecond, ST2, DT), dateadd(millisecond, ST2 + T2, DT), 2 ),
( dateadd(millisecond, ST3, DT), dateadd(millisecond, ST3 + T3, DT), 3 ),
( dateadd(millisecond, ST4, DT), dateadd(millisecond, ST4 + T4, DT), 4 )
) as pvt(SSD, SED, S);
Вывод форматируется как строка, чтобы легко проверить время с помощью миллисекунд. Очевидно, вы обычно используете необработанное типизированное значение.
https://rextester.com/XDD81255