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

标签 sql sql-server t-sql 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<中.

最佳答案

单向;

--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。

关于保存在字段中的 SQL 函数 - 如何执行 DATEADD()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16014634/

相关文章:

mysql - 计算一条记录每天处于特定状态的时间

mysql - 如果字符串与模式匹配,则删除字符串的匹配部分

mysql - 不使用子查询过滤值

SQL:内连接两个海量表

SQL-Server 聚合(Count)可能不会出现在 WHERE 中

sql-server - 如何将驱动器映射到 SQL 实例?

mysql - 将数据保存到sql中的2个表中

sql-server - MSSQL 组直到类型改变

SQL查询获取两个日期之间的月份列表

sql-server - SQL Azure 是否支持使用西里尔字符替换 T-SQL 函数?