我必须更改 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/