sql server - Defining type as a variable - DATEADD(type, value, date) - SQL -
i had change date in 1 of column of sql table (datetime field), increment year 1. simple way perform action (unless knows better way) update table , set column dateadd()
-- sample 1 -- dateadd(type, value, date) select dateadd(year, 1, getdate()) since i'm lazy programmer, don't want keep updating tables every time run in such situation. decided write small script (function) gets type, value user , perform operation. ran situation can't use type variable.
-- sample 2 -- error in code declare @type varchar(10) = 'year' ,@increment int = 1 select dateadd(@type, @increment, getdate()) i can write case statement based on 'type' value can select update statement.
-- sample 3 declare @type varchar(10) = 'year' ,@increment int = 1 update table_name set column_date = case @type when 'year' dateadd(year, @increment, column_date) when 'month' dateadd(month, @increment, column_date) -- , on end but there way perform action without case statement, or can make sample code '2' run?
p.s. more of knowledge based question - not holding me back, i'm curious know if possible.
thanks! :)
an alternative provided solution use dynamic sql:
setup:
-- drop table dbo.datetest create table dbo.datetest ( thedate date, updateddate date ) truncate table dbo.datetest go insert dbo.datetest (thedate) values ('20150203'), ('20150506'), ('20141231') go code:
select * dbo.datetest declare @type varchar(8) = 'year' -- must dateadd recognizable token declare @increment int = 2 declare @sql nvarchar(1000) = n' update dbo.datetest set updateddate = dateadd(' + @type + ', @increment, thedate)' exec sp_executesql @sql, n' @increment int', @increment select * dbo.datetest i wish date part provided parameter, not seem possible.
Comments
Post a Comment