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

Hola de nuevo PabloJN... creo que no te haz dado el tiempo para investigar un poco acerca del manejo de fechas en oracle, no deberías de esperar que el código que aquí te proponemos te funcione simplemente con copiar y pegar. La mayoría de las veces tendrás que hacer adecuaciones al código para adecuarlo a lo que necesitas. Ojo con eso.

Ahora bien, de acuerdo a lo que entendí, el parámetro $fecha es de tipo texto, ya que proviene de un formulario correcto??? lo primero que deberías decirnos es cuál es el formato de la cadena, ya que de ahí dependerá si se tiene que cambiar el formato o no.

Para el ejemplo voy a suponer que $fecha = '2011-04-12'.

supongamos tenemos una tabla con los siguientes datos

Código SQL:
Ver original
  1. CREATE TABLE tabla (fecha DATE);
  2.  
  3. INSERT INTO tabla VALUES (to_date('2011-04-11 12:04:24', 'yyyy-mm-dd hh24:mi:ss'));
  4. INSERT INTO tabla VALUES (to_date('2011-04-12 15:05:16', 'yyyy-mm-dd hh24:mi:ss'));
  5. INSERT INTO tabla VALUES (to_date('2011-04-13 13:07:10', 'yyyy-mm-dd hh24:mi:ss'));
  6. INSERT INTO tabla VALUES (to_date('2011-04-11 11:04:24', 'yyyy-mm-dd hh24:mi:ss'));
  7. INSERT INTO tabla VALUES (to_date('2011-04-12 09:05:16', 'yyyy-mm-dd hh24:mi:ss'));
  8. INSERT INTO tabla VALUES (to_date('2011-04-13 21:07:10', 'yyyy-mm-dd hh24:mi:ss'));

Código:
fecha
------------------------------
2011-04-11 12:04:24
2011-04-12 15:05:16
2011-04-13 13:07:10
2011-04-11 11:04:24
2011-04-12 09:05:16
2011-04-13 21:07:10
para encontrar los registros que tengan una fecha menor al parámetro $fecha la consulta quedaría más o menos así:

Código SQL:
Ver original
  1. /*con el valor directo*/
  2. SELECT to_char(fecha, 'yyyy-mm-dd hh24:mi:ss') FROM tabla WHERE
  3. to_date(to_char(fecha, 'dd/mm/yyyy'), 'dd/mm/yyyy') <
  4. to_date('2011-04-12', 'yyyy-mm-dd')
  5.  
  6. /*con el parámetro $fecha*/
  7. SELECT to_char(fecha, 'yyyy-mm-dd hh24:mi:ss') FROM tabla WHERE
  8. to_date(to_char(fecha, 'dd/mm/yyyy'), 'dd/mm/yyyy') <
  9. to_date('".$fecha."', 'yyyy-mm-dd)

es decir, si observas en la parte donde se utiliza el parámetro $fecha NO SE HACE UNA CONVERSION TO_DATE-TO_CHAR, ya que este parámetro ya es una cadena y tiene un formato de fecha especificado, por lo tanto sólo es necesario cambiar esa cadena a fecha, y lo hacemos con un TO_DATE simple.

La conversión TO_DATE-TO_CHAR se hace cuando estás trabajando con campos tipo fecha, convertimos primero a cadena con el formato que queremos para obtener una cadena y después esa cadena la convertimos nuevamente a fecha.

el resultado de la consulta sería:

Código:
fecha
------------------------------
2011-04-11 12:04:24
2011-04-11 11:04:24
Te repito, este ejemplo funcionaría considerando que $fecha = '2011-04-12'. Si el parámetro tiene otro formato entonces habría que hacer algunas adecuaciones.

Haz algunas pruebas, pregúntale a SAN GOOGLE cómo se manejan las fechas en Oracle para ver si obtienes alguna respuesta, y si continuas con problemas, responde las preguntas que te hizo el compañero Huesos52 para tratar de ayudarte.

Saludos
Leo.