Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/04/2011, 09:06
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: conversion fechas

Hola Huesos52:

Cita:
Hacer to_date(to_char(fecha,'formato'),'formato') es equivalente a hacer fecha
Hay una pequeña pero a la vez gran diferencia al hacer este tipo de conversiones pues al parecer no tomas en cuenta que los campos tipo fecha TAMBIÉN ALMACENAN LA HORA. Supongamos que queremos obtener la diferencia en días entre el 04 de abril de 2011 hasta el día de hoy. Según tu razonamiento sería algo como esto:

Código SQL:
Ver original
  1. SELECT sysdate - to_date('04/04/2011', 'DD/MM/YYYY') dias_de_diferencia FROM dual;

Código:
dias_de_diferencia
----------------------------
8.41927083333333333333333333333333333333
Este resultado es perfectamente correcto, es decir, no hay nada de malo en el cálculo, pero si haces lo siguiente

Código SQL:
Ver original
  1. SELECT to_date(to_char(sysdate, 'DD/MM/YYYY'), 'DD/MM/YYYY') - to_date('04/04/2011', 'DD/MM/YYYY') dias_de_diferencia FROM dual;

El resultado de estas consultas sería

Código:
dias_de_diferencia
----------------------------
8
Es decir, al aplicar la doble conversión al SYSDATE "eliminamos" la parte de la hora a la fecha (en realidad se asigna 00:00:00.000) de tal manera que el resultado no presenta parte decimal. De esta manera creo que es claro que hacer to_date(to_char(fecha,'formato'),'formato') NO ES EQUIVALENTE a hacer fecha.

La misma lógica aplicaría para los rangos. Si tuvieras por ejemplo en tu tabla la fecha

2011-04-12 12:04:24

y compararas simplemente que fecha >= sysdate, sólo sería verdadera después de las 12:04:23. Si te interesa SÓLO LA FECHA Y NO LA HORA tendrías que hacer la conversión a las dos partes de la comparación.


Estoy de acuerdo contigo en que la función TO_CHAR es la indicada para mostrar las fechas en el formato que quieras, pero en este caso también tiene otras aplicaciónes.

Esperemos los comentarios del compañero PabloJN.

Saludos
Leo.

Última edición por leonardo_josue; 12/04/2011 a las 09:17