2009-10-27 4 views
0

J'exécute la requête ci-dessous, Il me renvoie la ligne vide.Cependant, il y a des enregistrements dans le tableau ayant upd_time = '12 -MAR-08 '. Je ne comprends pas pourquoi il ne renvoie pas la date '12 -MAR-08'.Veuillez m'aider?Oracle date fonction

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

Répondre

0

je n'ai pas accès à un db oracle pour le moment mais je me souviens en utilisant 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'; 
+0

Merci Kamal..il travaille !!! –

1

Est-il même si vous faites un

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

Il se pourrait que l'upd_time est pas une date, mais un horodatage, il contient en fait, par exemple, -MAR-08 '12 05:30' ce qui ne serait pas la même chose. trunc() supprime la partie heure de l'horodatage.

Comme il ne retourne pas d'erreur, je suppose que la date correctement parse, mais sinon vous pouvez essayer avec to_date('12-MAR-08','DD-MON-YY')

+0

Jimmy, Le type de données de upd_time est "date" –

+0

oui, mais les datatypes peuvent également contenir des horodatages, cela dépend de la façon dont les données sont stockées –

+0

Le type de données Oracle "Date" contient également des informations de temps (heures, minutes, secondes). – Thorsten

2

Il est probable que upd_time est pas exactement 12-MAR-08. Le format de date n'affiche pas le composant heure, mais il est probablement présent (le type de données DATE dans Oracle peut contenir à la fois des composants date et heure).

Essayez ceci (il vous permettra de voir les composants de temps):

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

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

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

Ensuite, vous devez Tenez compte du fait que le type de données Oracle "Date" 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 la upd_time est tronquée à 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 y a d'autres façons de la peau ce chat (vous pouvez transférer votre colonne updTime à un bon champ char avec to_char(upd_time, 'DD-MMM-YY')), mais il est généralement conseillé de rendre les données que vous recherchez similaires à ce que vous pouvez trouver dans la base de données car cela augmente vos chances d'utiliser un index pour la recherche.