Одной из альтернатив будет построение строки с вычислением. Затем вы можете запустить сгенерированный SQL с sp_executesql
, указав @enddate
в качестве выходного параметра:
declare @startdate datetime
declare @duration varchar(10)
declare @enddate datetime
set @startdate = '2010-01-02 13:30'
set @duration = '0.12:30'
declare @sql nvarchar(max)
set @sql = 'set @enddate = dateadd(mi,24*60*' +
replace(replace(@duration,'.','+60*'),':','+') + ', @startdate)'
exec sp_executesql @sql,
N'@startdate datetime, @enddate datetime out',
@startdate, @enddate out
Это создает строку, содержащую set @enddate = dateadd(mi,24*60*0+60*12+30, @startdate)
, а затем запускает ее.
Я сомневаюсь, что это быстрее, чем обычный charindex
способ:
declare @pos_dot int
declare @day int
declare @hour int
declare @minute int
select
@pos_dot = charindex('.',@duration),
@day = cast(left(@duration, @pos_dot-1) as int),
@hour = cast(left(right(@duration, 5), 2) as int),
@minute = cast(right(@duration, 2) as int),
@enddate = dateadd(mi, 24*60*@day + 60*@hour + @minute, @startdate)