Domanda

Sto eseguendo la query di seguito, mi restituisce la riga vuota. Tuttavia ci sono record nella tabella con upd_time = '12 -MAR-08'.Non capisco perché non sta restituendo la data '12 - MAR-08'.Per favore, aiutatemi ??

SELEZIONA br_data.upd_time FROM BANKREC.br_data dove br_data.upd_time = '12 -MAR-08 ';

È stato utile?

Soluzione

Al momento non ho accesso a un orb db ma ricordo di aver usato to_char.

try

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

Altri suggerimenti

È probabile che upd_time non sia esattamente 12-MAR-08. Il formato della data non mostra il componente ora, ma è probabilmente presente (il tipo di dati DATE in Oracle può contenere sia i componenti data che l'ora).

Prova questo (ti permetterà di vedere i componenti del tempo):

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');

È lo stesso se fai un

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

È possibile che upd_time non sia una data, ma un timestamp, quindi in realtà contiene ad esempio '12 -MAR-08 05:30 'che non sarebbe la stessa cosa. trunc () rimuove la parte temporale del timestamp.

Poiché non restituisce un errore, suppongo che analizzi correttamente la data, ma altrimenti potresti provare con to_date ('12 -MAR-08 ',' DD-MON-YY ')

Dovresti usare la funzione Oracle per convertire correttamente la tua stringa in una data usando

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

Quindi devi tenere conto del fatto che Oracle " Date " il tipo di dati contiene anche informazioni sul tempo al secondo più vicino. Ciò significa che la data che è stata costruita nel primo passaggio è in realtà la mezzanotte del 12 marzo. Quindi devi assicurarti che upd_time sia troncato a mezzanotte:

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

L'intera query diventa

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

Esistono altri modi per abbellire questo gatto (è possibile trasferire la colonna updTime in un campo char appropriato con to_char (upd_time, 'DD-MMM-YY') ), ma di solito è consigliabile i dati che stai cercando simili a quelli che puoi trovare nel database in quanto aumentano le tue possibilità di utilizzare un indice per la ricerca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top