2012-04-30 2 views
14

У меня есть список дней рождения, и год является единственной частью, которая является неправильной. У меня есть список ID # для этих людей. Есть ли способ изменить только год для всех этих людей? Я думал что-то вроде создания таблицы результатов запроса, а затем с использованием запроса UPDATESET, но я не знаю, как изменить только год.Как изменить только год даты datatype

enter image description here

Sample включен в редактировании. Каждый год должен быть уменьшен на 2.

+1

Отсоединяются ли они на определенное количество лет? Если нет, то откуда вы знаете, что такое новое значение? – zimdanen

+0

Почему вы указали формат yyyy-mm-dd? Как бы то ни было, ваше поле хранится в варчаре? –

+0

Было бы полезно, если вы покажете свою структуру таблицы и несколько примеров неправильных дат и как вы знаете, что их исправить. –

ответ

30

Если все строки должны быть уменьшены на два года, а затем:

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

Не могли бы вы объяснить это немного, пожалуйста? Я предполагаю, что [исправление] является правильным, год? – wootscootinboogie

+0

Я понятия не имею, вам нужно рассказать нам, как вы знаете, что исправить каждую дату. Вы говорите, что это неправильно, но где правильный источник? –

+0

Нет, я не сказал, что это неправильно, просто для небольшого разъяснения на жаргоне :). src.id (is myTable.id) – wootscootinboogie

20

Вот самый короткий я могу думать, изменить год к 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

+0

Но это не просьба. –

+1

Это запрос, изменить только год –

+0

Если база данных немного объектно-ориентированная, мы можем сделать это: 'UPDATE x SET d.Year = 2050'. Можно только мечтать :-) –

4

В случае, если кто-то нуждается в нем для MySQL, вот синтаксис:

UPDATE dbo.TableToUpdate SET [Дата Column] = DATE_ADD ([Дата Column], ИНТЕРВАЛ -2 ГОД);

Смежные вопросы