Sql server 2008 将X年数添加到日期时间变量SQL Server 2008

Sql server 2008 将X年数添加到日期时间变量SQL Server 2008,sql-server-2008,Sql Server 2008,我需要在日期的年份部分加上10年,日期以yyyy-mm-dd格式存储,适用于2010年访问过的所有人。下面是我想尝试的查询,但我还不知道如何使用SQL Server的回滚功能。Visityear是varchar数据类型 update myTable set admitdate=dateadd(yyyy,10,admitdate) where visitYear='2010' 如果您想在桌子上做: BEGIN TRANSACTION UPDATE dbo.myTable SET admitda

我需要在日期的年份部分加上10年,日期以yyyy-mm-dd格式存储,适用于2010年访问过的所有人。下面是我想尝试的查询,但我还不知道如何使用SQL Server的回滚功能。Visityear是varchar数据类型

update myTable
set admitdate=dateadd(yyyy,10,admitdate)
where visitYear='2010'

如果您想在桌子上做:

BEGIN TRANSACTION

UPDATE dbo.myTable
SET admitdate = DATEADD(YEAR, 10, admitdate)
WHERE visitYear = '2010'

SELECT visityear, admitdate 
FROM dbo.myTable
WHERE visitYear = '2010'

ROLLBACK TRANSACTION    

当然-如果要实际应用更新,请使用
COMMIT
而不是
ROLLBACK

在SQL Server 2008中,所有查询都是隐式提交的事务的一部分。我假设您可以使用dateadd函数,您所拥有的看起来是正确的。因此,要修改以允许回滚,您可以执行以下操作-尽管不确定何时/为什么要回滚,但需要添加该逻辑

BEGIN TRANSACTION addDateYears
update myTable
set admitdate=dateadd(yyyy,10,admitdate)
where visitYear='2010'

/* IF SOMETHING ROLLBACK TRANSACTION addDateYears */

COMMIT TRANSACTION addDateYears

如果它是一个日期-您应该将它存储为
日期
(或
日期时间
)-那么您可以轻松地执行此操作,而无需所有转换和格式化麻烦…但是为什么
VisitYear
varchar
??您可以很容易地将其设置为一个计算列,公式为
YEAR(admitdate)
,然后使用它-SQL Server会自动将年份(作为INT)保存在其中…visitYear是varchar,因为2010年数据集中的一些人实际上在2009年被录取,因为他们的停留时间跨越了一年。所以2009年末被录取的人可能会进入2010年,这对我来说是当时最容易做的事情。我仍在努力学习如何使用SSMS和SQL Server,不想从数据库中删除任何内容,直到我对它感到满意为止。数据来自2011年。我需要加上10年的实地考察,这发生在2010年。其中许多错误地存储了2000年。