Разным датам задать, один год.

Romulus
Дата: 07.12.2012 16:16:09
Например есть даты:
01.01.1978
05.04.1998
Как задать им один года, что бы на выходе получилось:
01.01.2012
05.04.2012
orawish
Дата: 07.12.2012 16:22:09
Romulus,

with t as (select sysdate-400*level as d from dual connect by level<10)
select d,trunc(sysdate,'yyyy') + to_char(d,'ddd') from t;
orawish
Дата: 07.12.2012 16:22:40
orawish
Romulus,

with t as (select sysdate-400*level as d from dual connect by level<10)
select d,trunc(sysdate,'yyyy') + to_char(d,'ddd')-1 from t;
кит северных морей
Дата: 07.12.2012 16:23:32
Romulus,

вычесть из исходной даты первого января того же года, результат прибавить к первому января нужного года.
tru55
Дата: 07.12.2012 16:25:28
SELECT to_char(to_date('01.01.1978', 'dd.mm.yyyy'), 'dd.mm') ||'.2012',
       to_char(to_date('05.04.1998', 'dd.mm.yyyy'), 'dd.mm') ||'.2012'
FROM dual

При необходимости конвертнуть в date (to_date)
orawish
Дата: 07.12.2012 16:29:14
orawish
orawish
Romulus,

with t as (select sysdate-400*level as d from dual connect by level<10)
select d,trunc(sysdate,'yyyy') + to_char(d,'ddd')-1 from t;

если приглядеться, то фокус в общем виде у меня не удался из-за високосных лет.
так что, наверное лучше не выпендриваться, а пользовать
to_date(to_char,..'mmdd')

с оговоркой, что тут високосность может не сдвиг, а ошибку породить
Romulus
Дата: 07.12.2012 16:30:04
tru55, Спасибо идеальный вариант, как я сам не догадался понесло даты слаживать и вычитать
AmKad
Дата: 07.12.2012 16:30:29
orawish
orawish
Romulus,

with t as (select sysdate-400*level as d from dual connect by level<10)
select d,trunc(sysdate,'yyyy') + to_char(d,'ddd')-1 from t;
with t as (select sysdate-400*level as d from dual connect by level<10)
select d,trunc(sysdate,'yyyy') + to_char(d,'ddd')-1 from t;

D          TRUNC(SYSDATE,'YYYY')+TO_CHAR(D,'DDD')-1
---------- ----------------------------------------
03.11.2011 02.11.2012                              
29.09.2010 28.09.2012                              
25.08.2009 24.08.2012                              
21.07.2008 21.07.2012                              
17.06.2007 16.06.2012                              
13.05.2006 12.05.2012                              
08.04.2005 07.04.2012                              
04.03.2004 04.03.2012                              
29.01.2003 29.01.2012                              

9 rows selected.

Високосность.

tru55, аналогично, в 2013 году нельзя будет преобразовать дату date '2008-02-29'.
-2-
Дата: 07.12.2012 16:31:09
Romulus
tru55, Спасибо идеальный вариант,
to_char(дата, 'dd.mm."2012"')
Romulus
Дата: 07.12.2012 16:32:26
orawish,

и то правда, может получиться криво.