【发布时间】:2015-10-14 09:50:12
【问题描述】:
我正在尝试在 SQL 存储过程中创建用于日期计算的动态代码,但在将字符串表达式和参数作为日期表达式执行时遇到问题。
我想在一个表中保存通用字符串表达式,该表将根据参数的值创建日期。
例如这是一个通用表达式:
DATEADD(@TimeResolution, -@IterationN, @CurrentCalc)
如您所见,这些泛型表达式由 to 参数组成。
在存储过程中,我打算声明表达式中的变量,并使用来自不同表的 select 语句为它们赋值。
问题是,在导出这些字符串值并编写表达式后,它没有给我想要的日期,但失败了。
例如,如果我编写以下代码
declare @Today date declare @LastYear date set @Today = getdate() set @LastYear = DATEADD(year, -1, @Today) select @Lastyear
它工作正常,我会得到去年的日期。
但是当我尝试这样的事情时:
declare @Today date
declare @LastYear date
declare @Timeresolution varchar(5)
select @Timeresolution = [Timeresolution] from dbo.mytable where rule_id=1//Timeresolution is a varchar column in my table holding the values 'year' or 'month'
declare Iteration int
select @Iteration = [Iteration] from dbo.mytable where rule_id=1 //Iteration is a int column in my table holding the values 1 or 2, or 3
set @Today = getdate()
set @LastYear = DATEADD(Timeresolution , -Iteration , @Today)
select @Lastyear
这给了我一个转换错误。
有没有办法创建这样的动态日期表达式?
【问题讨论】:
标签: sql-server tsql date stored-procedures