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

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -