另一种方法是使用计算构建一个字符串。然后您可以使用sp_executesql 运行生成的SQL,指定@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)