2012-04-30 30 views
14

Tengo una lista de cumpleaños y el año es la única parte incorrecta. Tengo una lista de IDs para estos individuos. ¿Hay alguna manera de cambiar solo el año para todas estas personas? Estaba pensando en hacer una tabla de los resultados de la consulta y luego usar una consulta UPDATESET, pero no sé cómo cambiar solo el año.Cómo cambiar solo el año de una fecha tipo de datos

enter image description here

muestra incluida en edición. Cada año tiene que ser disminuido por 2.

+1

¿Tienen cada uno un número específico de años? Si no, ¿cómo sabes cuál es el nuevo valor? – zimdanen

+0

¿Por qué dices el formato aaaa-mm-dd? Por casualidad, ¿su campo está almacenado en varchar? –

+0

Sería útil si muestra la estructura de su tabla y algunos ejemplos de fechas incorrectas y cómo sabe a qué corregirlos. –

Respuesta

30

Si todas las filas que se deben disminuir por dos años, entonces:

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

¿Puede explicar esto un poco, por favor? Supongo que el [arreglo] es el correcto, año? – wootscootinboogie

+0

No tengo ni idea, debe decirnos cómo sabe a qué corregir cada fecha. Usted dice que es incorrecto, pero ¿dónde está la fuente correcta? –

+0

No, no he dicho que sea incorrecto, solo por una pequeña aclaración sobre la jerga :) p. src.id (es myTable.id) – wootscootinboogie

20

Aquí es la más corta que puedo pensar, cambiar el año de 2050:

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

datos de la muestra:

create table x(d date); 

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

de salida:

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

prueba en vivo: http://www.sqlfiddle.com/#!3/9a8b4/2

+0

Pero esa no es la solicitud. –

+1

Esa es la solicitud, cambie solo el año –

+0

Si la base de datos está orientada a objetos, podemos hacer esto: 'ACTUALIZAR x FIJAR d.Año = 2050'. Solo puedo soñar :-) –

4

En caso de que nadie más lo necesita para MySQL, aquí está la sintaxis:

ACTUALIZACIÓN dbo.TableToUpdate SET [Fecha Columna] = DATE_ADD ([Fecha Columna], el intervalo de -2 AÑO);

Cuestiones relacionadas