SQL: Diferencia entre YYYY y RRRR

Cuando trabajamos en Oracle con fechas, puede interesarnos el año en formato de 4 dígitos. En este momento, ¿qué máscara debemos utilizar con la función "to_date" o "to_char"?, ¿YYYY o RRRR?.

Para elegir una u otra opción, consideremos lo siguiente:

1. No importa usarla con mayúsculas o minúsculas (YYYY o yyyy).

2. No es recomendable usar la función "trunc" antes de cualquiera de las dos funciones mencionadas porque perderemos los dos dígitos más a la izquierda del año (19 ó 20 normalmente).

3. El formato RRRR está pensado para evitar el Efecto 2000. De manera que, si tenemos una fecha con formato "dd/mm/yy" y aplicamos una máscara RRRR se calcularán los dos dígitos del año que faltan presuponiendo que se trata de una fecha posterior a 1950. Es decir, aplicando la función "to_date" (no "to_char") se realiza la siguiente conversión:
3.1. Si YY está entre 00 y 49, con la máscara RRRR conseguiremos 20YY. Por ejemplo, 12/08/01 será 12/08/2001. En caso de usar la máscara YYYY, conseguiríamos 12/08/0001.
3.2. Si YY está entre 50 y 99, con la máscara RRRR conseguiremos 19YY. Por ejemplo, 12/08/83 será 12/08/1983. En caso de usar la máscara YYYY, conseguiríamos 12/08/0083.

4. Debemos tener en cuenta que "to_date" y "to_char" nos devuelven resultados distintos al aplicar YYYY sobre una fecha con un año de dos dígitos. Veamos cuál es el resultado de aplicar las máscaras con una y otra función usando como ejemplo la variable "sysdate" que, por defecto, almacena solo los dos últimos dígitos del año:

select to_date(sysdate, 'dd/mm/rrrr') from dual; -- Devuelve 27/08/2010.
select to_char(sysdate, 'dd/mm/rrrr') from dual; -- Devuelve 27/08/2010.
select to_date(sysdate, 'dd/mm/yyyy') from dual; -- Devuelve 27/08/0010.
select to_char(sysdate, 'dd/mm/yyyy') from dual; -- Devuelve 27/08/2010.

4 comentarios:

Anónimo dijo...

Parece que te vas a dedicar a dar clases en vez de recibirlas,jeje. Te escribo desde un IPad de una tienda Apple de PAris,mola un monton!bye!MGH.

 Pail dijo...

jajajajaja, más que darlas o recibirlas tengo ganas de poner todo esto en práctica ;-).

No estés mucho tiempo en la tienda esa que los iPad no traen nada bueno :-P.

Un abrazo y a seguir pasándolo bieeeeeen!!

Anónimo dijo...

Lo mejor es usar los cuatro digitos del año,

YYYY, o RRRR y con esto ya no hay diferencia, al parecer antes , les hablo de mucho tiempo antes, se usaban dos digitos para el año, para ahorrar bytes de almacenamiento porque era muy caro, pero como somos seres de hábitos, muchos siguieron usando dos digitos para el año cuando ya la memoria era barata y se podian usar 4.

Anónimo dijo...

En realidad hay que pensar que los datos anteriores al año 2000 todavía existen en las bases, por lo que si o si hay que usar RRRR y evitarse dolores de cabeza. En el caso de una base de datos nueva en la que no se necesiten migrar datos anteriores, puede ser usado indistintamente.