Pregunta

Estoy ejecutando la consulta a continuación, me devuelve la fila en blanco. Sin embargo, hay registros en la tabla que tienen upd_time = '12 -MAR-08'.No entiendo por qué no devuelve la fecha '12 - MAR-08'.¿Por favor, ayúdenme?

SELECCIONAR br_data.upd_time FROM BANKREC.br_data donde br_data.upd_time = '12 -MAR-08 ';

¿Fue útil?

Solución

No tengo acceso a una base de datos Oracle en este momento, pero recuerdo haber usado to_char.

prueba

SELECT br_data.upd_time FROM BANKREC.br_data where to_char(br_data.upd_time, 'DD-MON-YY') = '12-MAR-08';

Otros consejos

Es probable que upd_time no sea exactamente el 12-MAR-08. El formato de fecha no muestra el componente de hora, pero probablemente esté allí (el tipo de datos DATE en Oracle puede contener componentes de fecha y hora).

Pruebe esto (le permitirá ver los componentes de tiempo):

alter session set nls_date_format='DD-MON-YY HH24:MI:SS';

SELECT br_data.upd_time FROM BANKREC.br_data
where br_data.upd_time >= to_date('12-MAR-08','DD-MON-YY')
and br_data.upd_time < to_date('13-MAR-08','DD-MON-YY');

¿Es lo mismo si haces un

SELECT br_data.upd_time FROM BANKREC.br_data 
       where trunc(br_data.upd_time) = '12-MAR-08';

Podría ser que upd_time no sea una fecha, sino una marca de tiempo, por lo que en realidad contiene, por ejemplo, '12-MAR-08 05:30 ', que no sería lo mismo. trunc () elimina la parte de tiempo de la marca de tiempo.

Dado que no devuelve un error, supongo que analiza la fecha correctamente, pero de lo contrario podría intentar con to_date ('12 -MAR-08 ',' DD-MON-YY ')

Debería usar la función de Oracle para convertir su cadena correctamente en una fecha usando

to_date('12-MAR-08', 'DD-MMM-YY')

Entonces debe tener en cuenta que Oracle " Date " datatype también contiene información de tiempo al segundo más cercano. Esto significa que la fecha que se construyó en el primer paso es en realidad la medianoche del 12 de marzo. Por lo tanto, debe asegurarse de que el upd_time se trunca a la medianoche:

trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY')

Su consulta completa se convierte en

SELECT br_data.upd_time 
FROM BANKREC.br_data 
WHERE trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY');

Hay otras formas de desollar este gato (puede transferir su columna updTime a un campo char apropiado con to_char (upd_time, 'DD-MMM-YY') ), pero generalmente es recomendable los datos que busca son similares a los que puede encontrar en la base de datos, ya que eso aumenta sus posibilidades de utilizar un índice para la búsqueda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top