sql - 将类型定义为变量 - DATEADD(type, value, date) - SQL

标签 sql sql-server t-sql

我必须更改 SQL 表的一列(日期时间字段)中的日期,将 YEAR 加 1。执行此操作的简单方法是(除非有人知道更好的方法)更新表和 SET带有 DATEADD() 的列

-- sample 1    
-- DATEADD(type, value, date)
SELECT DATEADD(YEAR, 1, GETDATE())

由于我是一个懒惰的程序员,我不想每次遇到这种情况时都不断更新表。所以我决定编写一个小脚本(函数),从用户那里获取 TYPE、VALUE 并执行操作。但我遇到了无法使用 TYPE 作为变量的情况。

-- Sample 2
-- Error in the code
DECLARE @type VARCHAR(10) = 'YEAR'
        ,@increment INT = 1

SELECT DATEADD(@type, @increment, GETDATE())

我可以编写一个 case 语句,根据“TYPE”值我可以选择更新语句。

-- Sample 3
DECLARE @type VARCHAR(10) = 'YEAR'
        ,@increment INT = 1

UPDATE  Table_name
SET     Column_date = CASE @type WHEN 'YEAR' THEN DATEADD(YEAR, @increment, Column_date)
                                WHEN 'MONTH' THEN DATEADD(MONTH, @increment, Column_date)
                                -- and so on
                        END

但是有没有一种方法可以在没有 case 语句的情况下执行该操作,或者任何人都可以使示例代码“2”运行吗?

附注它更多的是一个基于知识的问题 - 它并没有阻止我,我只是想知道它是否可能。

谢谢! :)

最佳答案

您可以从用户那里获取所有类型值,然后一次性更新它们。只需默认为 0 他们不想更改的值

DECLARE @Year INT = 0, 
        @Month INT = 0, 
        @Day INT = 0


UPDATE  Table_name
SET     Column_date = DATEADD(YEAR, @Year, DATEADD(Month, @Month, DATEADD(Day, @Day, Column_date)))

关于sql - 将类型定义为变量 - DATEADD(type, value, date) - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622295/

相关文章:

c# - 了解 LINQ 如何编译为 ADO.NET SQL 语句

sql - 存储过程超时..删除,然后创建,然后又恢复了?

mysql - 查询过滤

sql-server - 使用 OPENROWSET 通过 SQL Server 提供程序查询 Active Directory 时出错

sql - @@TRANCOUNT 和当前连接

sql-server - SQL Server如何监控表结构变化?

sql - 限制 SQL 中的结果

sql - 更新日期字段

php - MySQL - 如何从最小/最大值获取最小/最大日期

sql - 如何获得列的总和,其中另一列的计数 = 1