Question

J'exécute la requête ci-dessous. Elle me renvoie la ligne vide. Cependant, la table contient des enregistrements dont la valeur est upd_time = '12 -MAR-08 '. Je ne comprends pas pourquoi elle ne renvoie pas la date '12 - MAR-08 '. S'il vous plaît aidez-moi ??

SELECT br_data.upd_time FROM BANKREC.br_data où br_data.upd_time = '12 -MAR-08 ';

Était-ce utile?

La solution

Je n'ai pas accès à une base de données oracle pour le moment, mais je me souviens de l'utilisation de to_char.

essayer

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

Autres conseils

Il est probable que upd_time ne soit pas exactement le 12-MAR-08. Le format de date n’indique pas le composant heure, mais il est probablement là (le type de données DATE dans Oracle peut contenir des composants date et heure).

Essayez ceci (cela vous permettra de voir les composants temporels):

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

Est-ce la même chose si vous faites un

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

Il se peut que le paramètre upd_time ne soit pas une date, mais un horodatage; il contient donc par exemple "12 -MAR-08 05:30", ce qui ne serait pas la même chose. trunc () supprime la partie heure de l'horodatage.

Puisqu'il ne renvoie pas d'erreur, je suppose qu'il analyse correctement la date, mais vous pouvez sinon essayer avec to_date ('12 -MAR-08 ',' DD-MON-YY ')

Vous devez utiliser la fonction Oracle pour convertir votre chaîne correctement en une date à l'aide de

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

Vous devez ensuite prendre en compte le fait que la " date " Oracle Le type de données contient également des informations temporelles à la seconde près. Cela signifie que la date qui a été construite dans la première étape est en réalité minuit le 12 mars. Donc, vous devez vous assurer que le upd_time est tronqué à minuit:

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

Votre requête complète devient

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

Il existe d'autres manières de paramétrer ce chat (vous pouvez transférer votre colonne updTime dans un champ de caractère approprié avec to_char (upd_time, 'DD-MMM-YY') ), mais il est généralement conseillé les données que vous recherchez sont similaires à ce que vous pouvez trouver dans la base de données, car cela augmente vos chances d'utiliser un index pour la recherche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top