28

我有一个生日列表,年份是唯一不正确的部分。我有这些人的 ID #s 列表。有没有办法只改变所有这些人的年份?我正在考虑制作一个查询结果表然后使用UPDATE SET查询,但我不知道如何只更改年份。

在此处输入图像描述

样本包含在编辑中。每年需要减少2。

4

3 回答 3

47

如果所有行都需要减少两年,那么:

UPDATE dbo.TableToUpdate
  SET [Date Column] = DATEADD(YEAR, -2, [Date Column]);

如果所有行都需要设置为特定年份(例如 2019 年),则列是date

UPDATE dbo.TableToUpdate
  SET [Date Column] = DATEFROMPARTS(2019, MONTH([Date Column]), DAY([Date Column]);

如果所有行都需要设置为特定年份(例如 2019 年)并且列不是date,则可以使用DATETIMEFROMPARTSor SMALLDATETIMEFROMPARTS,但此时以下内容会变短:

UPDATE dbo.TableToUpdate
  SET [Date Column] = DATEADD
  (
    YEAR, 
    -DATEDIFF(YEAR, '20190101', [Date Column]), 
    [Date Column]
  );
于 2012-04-30T18:03:38.953 回答
26

这是我能想到的最短时间,将年份更改为 2050:

select 
    dateadd(year, (2050 - year(d)), d)            
from x

样本数据:

create table x(d date);

insert into x values
('2001-11-19'),
('2020-07-05'),
('2012-05-01');

输出:

COLUMN_0
2050-11-19
2050-07-05
2050-05-01

现场测试:http ://www.sqlfiddle.com/#!3/9a8b4/2

于 2012-04-30T18:15:24.767 回答
5

万一其他人需要它用于 MySQL,语法如下:

UPDATE dbo.TableToUpdate 
SET    [Date Column] = DATE_ADD([Date Column], INTERVAL -2 year); 
于 2014-09-01T05:20:21.060 回答