2010-06-23 14 views
0

J'ai surfé sur le site de SO en pensant que c'est assez évident mais hélas je n'en ai pas encore trouvé. Fondamentalement, la configuration est la suivante:Oracle to_date Comportement étrange de formatage SQL

J'ai une chaîne dans une table comme ceci:

06/22/2010 00:00:00

Je fais commande select :

SELECT To_Date(item, 'MM/DD/YYYY HH24:MI:SS') from that_table 

de sorte que je suis en train de faire efficacement

SELECT To_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS') from that_table 

Mes retours de base de données:

22.06.2010 00:00:00

Maintenant, je sais que je peux faire une

to_char(to_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'MM/DD/YYYY HH24:MI:SS') 

mais je dois la sélection pour retourner une format de date (MM/DD/YYYY HH24:MI:SS), pas une chaîne. Comment puis je faire ça?

Edit: sortie réel:

22.06.2010 00:00:00

sortie souhaitée (en format Date):

06/22/2010 00:00:00

+0

J'ai relu votre question plusieurs fois, mais je ne comprends pas ce que vous voulez. Au moins, veuillez ajouter l'exemple de la sortie désirée par rapport à la sortie réelle (edit) Aha, vous voulez dire le formatage de la date par défaut quand aucun format n'est fourni! – Juraj

+0

Juraj s'il vous plaît voir mes modifications. – Rio

Répondre

3

a La date est un point dans le temps, elle n'a pas de format (comme les nombres: ils n'ont pas de format). Lorsque vous affichez la date, il est évident qu'elle doit avoir un format: si vous ne donnez pas un format spécifique à Oracle, le format par défaut de votre session sera utilisé (paramètre de session NLS_DATE_FORMAT). En conséquence: utilisez le type de données DATE pour l'arithmétique et le stockage de date (pas de format). Utilisez la fonction to_char ou quelque chose d'équivalent lorsque vous avez besoin d'afficher la date (dans un rapport ou dans l'interface graphique).

+0

Mais alors comment suis-je censé pouvoir faire des comparaisons de dates (comme la date entre aujourd'hui et demain?) – Rio

+1

@Rio: Avec des opérateurs de comparaison. _like date entre aujourd'hui et demain_ Si toutes les dates sont stockées en tant que dates, alors la comparaison serait quelque chose comme 'trunc (sysdate) <= date_in_question et date_in_question

5

Une date n'a pas de format, elle n'est formatée que lorsqu'elle est convertie en chaîne de caractères à des fins d'affichage. Si vous utilisez SQL Plus puis lorsque vous affichez une colonne DATE (sans utiliser TO_CHAR pour formater explicitement), SQL Plus lui-même effectue une conversion TO_CHAR utilisant le paramètre NLS_DATE_FORMAT:

SQL> select sysdate from dual; 

SYSDATE 
--------- 
23-JUN-10 

SQL> alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'; 

Session altered. 

SQL> select sysdate from dual; 

SYSDATE 
------------------- 
2010-06-23 15:17:12 

Si vous ne l'utilisez SQL Plus, alors quel que soit l'outil que vous utiliserez, vous ferez quelque chose de similaire et vous aurez peut-être un moyen différent de spécifier le format de la date pour l'affichage.