2010-02-04 6 views
2

Je dois interroger all_objects table où last_ddl_time='01 jan 2010' mais il refuse le format de date ...Format Oracle last_ddl_time

Tout corps me donne le format exact pour interroger?

Répondre

0

Vous pouvez utiliser la fonction to_date pour formater votre date. Si vous entrez dans une chaîne littérale, Oracle tente de convertir cette chaîne en utilisant to_date avec un format par défaut 'DD-MON-YY', donc votre date ressemblerait à « 01-janv.-10 ». Comme Oracle utilisera cette même fonction, vous pourriez vouloir le mettre en vous et profiter de la granularité plus fine que le formatage personnalisé peut fournir. Il est bon de noter que les dates stockées dans cette colonne ont probablement des dates plus précises, y compris les heures et les minutes, etc. Bien que vous allez prendre un peu un coup de performance, vous pouvez être mieux servi en utilisant trunc(last_ddl_time) si vous testez avec =.

Il y a quelques bonnes informations sur les dates dans Oracle à this link.

+0

a également essayé mais pas d'utilisation ... SELECT * FROM all_objects OÙ last_ddl_time = TO_DATE ('01 -01- 2010 ',' DD-MM-YYYY '); – ani8

+1

"pas d'utilisation"? - qu'est-ce qui s'est passé - a-t-il donné une erreur, ou est-ce que votre machine a explosé? –

2

Comme l'a dit AKF, vous devez utiliser Trunc à moins que vous connaissez l'heure exacte a été modifié le DDL. Votre requête que vous avez ajoutée dans les commentaires recherche tous les objets dont le DDL a été modifié au 1/1/2010 00:00:00. Essayez:

SELECT * 
    FROM all_objects 
WHERE trunc(last_ddl_time) = to_date('01-01-2010','dd-mm-yyyy'); 
+0

+1 pour mentionner l'élément de temps. – APC

1

Je vous suggère d'utiliser de dateliteral:

where trunc(last_ddl_time) = date '2010-01-01' 
0
SELECT * 
    FROM all_objects t 
WHERE trunc(t.last_ddl_time, 'DD') = to_date('2010-JAN-01', 'YYYY-MON-DD');