保存在字段中的SQL函数 - 如何执行DATEADD()?

时间:2013-04-15 11:59:56

标签: sql sql-server tsql sql-server-2008-r2

我有一个名为FunctionValue的字符串列字段。 此字段可以包含DATEADD(datepart, number, date)GETDATE(),也可以包含其他内容。

例如,如果是DATEADD(year, 3, GETDATE()) 我希望稍后在SP运行时期间执行此操作,并将值保存在名为@FunctionValue的变量中。

SET @FunctionValue = ( SELECT CASE
                        WHEN FunctionValue LIKE 'DATEADD%' THEN --???
                        WHEN FunctionValue LIKE 'GETDATE' THEN CAST(GETDATE() AS nvarchar(255))
                        ELSE FunctionValue
                    END AS FV
                    FROM @TSV_WithTarget

我不确定我需要把它放在那里以便无论价值如何,DATEADD函数的结果都会被返回并保存在@FunctionValue中。

2 个答案:

答案 0 :(得分:2)

单向;

--modify field or add an assignment
declare @sql nvarchar(128) = 'set @result = ' + 'DATEADD(year, 3, GETDATE())'

declare @FunctionValue datetime
exec sp_executesql @sql, N'@result datetime output', @FunctionValue output

select @FunctionValue

预先需要这种类型,或者你可以做一些丑陋的事情,比如显式地转换为sql_variant。

答案 1 :(得分:0)

试试这个 -

DECLARE @FunctionValue NVARCHAR(500)
SELECT @FunctionValue = 'SELECT ' + ( 
                            SELECT CASE
                                WHEN FunctionValue LIKE 'DATEADD%' THEN 'DATEADD(year, 3, GETDATE())'
                                WHEN FunctionValue LIKE 'GETDATE' THEN 'GETDATE()'
                                ELSE FunctionValue
                            END
                            FROM @TSV_WithTarget
                        )

EXEC sp_executesql @FunctionValue