Consulta a un campo date en Oracle

Mi problema consiste en que tengo un campo date en Oracle y sobre este deseo hacer una consulta, la consulta consite en traer todos los registros de la misma tabla donde el día y el mes son los parámetros de la consulta, es decir hay que ignorar el año. Por ejemplo quiero traer todos los registros de esta tabla donde el día sea 16 y el mes sea 03, pero sin importar de que año sea el día y mes.

1 respuesta

Respuesta
1
Aunque en este PC no tengo acceso a ninguna Instancia ORACLE, lo que preguntas creo que es demasiado fácil ... Mira este ejemplo para el día : 16 y mes : 03 ...
Select *
from tabla
where to_char(fecha, 'DDMM') = '1603';
Así de fácil. Recuerda que al dar este formato al campo, tienes que hacer dos cosas :
1.- Debes de indicar el día y el mes con 2 dígitos : 0101, 0108, ..., etc.
2.- Si la tabla es muy grande y quieres que la respuesta sea inmediata, create un indice de función :
CREATE INDEX my_index ON tabla( to_char(fecha, 'DDMM') );
Verifícalo todo ya que ahora mismo, como te he dicho no tengo acceso a ORACLE. Pero en principio esa solución te daría los resultados esperados.
Un Saludo
Y ya me contarás si te ha servido de algo.
Bye
Ramón
Hola, buenos días, muchas gracias por su respuesta, eso es lo que necesitaba, pero ahora hubo un cambio la consulta no se va a realizar con sql si no ejb ql, en este lenguaje no encuentro la manera de realizar algo similar a la forma de solucionar el problema que me planteo la cual ya probé y funciona el sql. Si tiene alguna idea de como solucionar este problema se lo agradecería mucho.
bye
No conocía la arquitectura en la que lo debías de desarrollar.
He estado mierando EJBQL y el lenguaje de interrogación a la BB. DD. Es tan minimalista que muy pocas cosas deja hacer (creo que es toda una involución). Tanta nueva arquitectura, rollos de EJB, es, SOA, ..., etc y se olvidan por completo que donde más rendimiento se pierde es en las consultas a la información que estos 'modulos' / 'servicios' o como los quieras llamar realizan sobre las BB. DD. Y su potencial.
En fin, pero para trucos ...
Hagamos una cosa, verdad que desde EJBQL se pueden llamar a funciones de BB. DD., ¿s?
Pues en lugar de la función 'to_char' que antes te he comentado en una referencia anterior, NO VAMOS A CREAR UNA PROPIA.
Donde la entrada sea de tipo DATE y la salida tipo VARCHAR2 con el día y el mes en 4 posiciones.
Crearemos la función en BB. DD. Comop esta :
CREATE OR REPLACE FUNCTION DIA_MES( fecha IN DATE )
RETURN VARCHAR2 DETERMINISTIC
IS
Begin
     RETURN TO_CHAR( fecha, 'DDMM' );
END;
/
Es necesario el 'DETERMINISTIC' ya que al ser una función de usuario, si no la pones la palabra no te dejará crear luego el índice asociado.
Una vez creada la función, se crea el indice :
CREATE INDEX IDX_DIA_MES ON tabla (DIA_MES(columna));
Intenta ahora ejecutar la sentencia SQL desde EJBQL :
select * from tabla where dia_mes( fecha ) = '1603';
Tienes que tener en cuenta que o lo ejecutas con el usuario propietario de la tabla y función o tener los privilegios para hacerlo.
A ver si 'cuela' ... Pero ante las grandes limitaciones de EJBQL pequeñas soluciones en el servidor de datos.
Ya me comentarás como te ha ido.
Un Saludo.
Ramón
Bye
Buenos días Ramon, gracias por tu pronta ayuda, en cuanto a la carencia de ejb ql estamos de acuerdo, hay muchas cosas que aun le hacen falta. Retomando el problema ejb ql si permite llamar funciones, pero para que permita esto hay que realizar unas configuraciones especiales en algunos archivos, debido a esos cambios y a la prontitud con que se necesita desarrollar esta consulta la cual va a ser adherida a un buscador el cual esta hecho en ejb ql, la solución de problema la tomare de una forma "facilista" haciendo la consulta con el día y mes especificado e iterando en un rango de años por decir de 1900 a 2010, con lo cual quedaría una consulta : campo in (dd/mm/1990,..., dd/mm/2010), esta es temporal mientras hay más tiempo para trabajar con el llamado de funciones desde ejb ql, que de seguro algún día se necesitaran.
Muchas gracias ramón por sus prontas respuestas, me fueron de gran utilidad, de seguro seguiré utilizando esta página, la cual me pereció excelente.
bye
Julián Poveda
Desarrollador Java

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas