Le format de date par défaut d'Oracle est AAAA-MM-JJ, pourquoi?
le format de date par défaut D'Oracle est AAAA-MM-JJ. Ce qui signifie Si je le fais:
select some_date from some_table
...I perdre la partie de temps de ma date.
Oui, je sais que vous pouvez "fixer" cette avec:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
mais sérieusement, pourquoi n'est-ce pas la valeur par défaut ci-dessus? En particulier dans un SGBD où les deux principaux types de données de suivi du temps (DATE et horodatage) tous les deux ont un composant qui comprend (au moins) précision de 1 seconde.
12 réponses
Si vous utilisez cette requête pour générer un fichier d'entrée pour votre Entrepôt de Données, alors vous devez formater les données de manière appropriée. Essentiellement dans ce cas vous convertissez la date (qui a une composante de temps) en une chaîne de caractères. Vous devez formater explicitement votre chaîne de caractères ou modifier votre nls_date_format pour définir la valeur par défaut. Dans votre requête, vous pouvez simplement faire:
select to_char(some_date, 'yyyy-mm-dd hh24:mi:ss') my_date
from some_table;
êtes-vous sûr que vous ne confondez pas Oracle database avec Oracle SQL Developer?
la base de données elle-même n'a pas de format de date, la date sort de la base de données sous forme brute. C'est au logiciel client de le rendre, et SQL Developer fait utiliser AAAA-MM-JJ comme son format par défaut, ce qui est presque inutile, je suis d'accord.
modifier: comme cela a été commenté ci-dessous, SQL Developer peut être reconfiguré pour afficher correctement les valeurs de DATE, il a juste de mauvaises valeurs par défaut.
Le format AAAA-MM-JJ fait partie de ISO8601 un standard pour l'échange de date (et heure) de l'information.
C'est très courageux de la part D'Oracle d'adopter une norme ISO comme celle-ci, mais en même temps, étrange, ils n'ont pas aller tout le chemin .
en général, les gens résistent à tout ce qui est différent, mais il ya beaucoup bon International raisons pour lui.
je sais que je dis des choses révolutionnaires, mais nous devrions tous adopter les normes ISO, même si nous le faisons un peu à la fois .
le plus grand PITA D'Oracle est que is n'a pas de format de date par défaut!
dans votre installation D'Oracle la combinaison des Locales et des options d'installation a choisi (le très sensible!) AAAA-MM-JJ comme format pour les dates de sortie. Une autre installation aurait pu choisir "JJ/MM/AAAA" ou "AAAA/JJ / MM".
si vous voulez que votre SQL soit portable vers un autre site Oracle, je vous recommande toujours wrap a TO_CHAR(datecol,'YYYY-MM-DD')
ou une fonction similaire autour de chaque colonne de date votre SQL ou alternativly définir le format defualt immédiatement après vous connecter avec
ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
ou similaire.
il n'est jamais sage de s'attendre à ce que les valeurs par défaut soient définies à une valeur particulière, IMHO, que ce soit pour les formats de date, de monnaie, les modes d'optimisation ou autre. Vous devez toujours définir la valeur du format de date dont vous avez besoin, dans le serveur, le client, ou l'application.
en particulier, ne comptez jamais sur les valeurs par défaut lors de la conversion des types de données numériques ou de date à des fins d'affichage, parce qu'un seul changement à la base de données peut briser votre application. Utilisez toujours explicite format de conversion. Pendant des années, j'ai travaillé sur des systèmes Oracle où le format d'affichage de date par défaut était MM/DD/RR, ce qui me rendait dingue, mais au moins m'obligeait à toujours utiliser une conversion explicite.
la plupart des IDE que vous pouvez configurer le masque par défaut pour une sorte de données comme la date, la devise, Le séparateur décimal, etc.
si vous utilisez Oracle SQL Developer :
Outils > Préférences > Base de données > NLS
Date Format: AAAA-MM-JJ HH24: MI: SS
C'est un" problème " du côté du client, pas vraiment un problème Oracle.
c'est l'application client qui formate et affiche la date de cette façon.
dans votre cas C'est SQL*Plus qui fait ce formatage.
Les autres clients SQL ont d'autres défauts.
une valeur de DATE selon la norme SQL est AAAA-MM-JJ. Donc même si Oracle stocke les informations sur l'heure, je pense qu'ils affichent la valeur d'une manière compatible avec le standard SQL. Dans la norme, il y a le type de données TIMESTAMP qui inclut l'information de date et d'heure.
Je ne suis pas un utilisateur D'Oracle (enfin, dernièrement de toute façon), mais...
dans la plupart des bases de données (et dans un langage précis), une date n'inclut pas une heure. Avoir une date ne signifie pas que vous êtes dénotant un spécifique deuxième date. En général, si vous voulez une heure en plus d'une date, ça s'appelle un timestamp.
Oracle a à la fois la Date et les types de données horodatage.
selon documentation Oracle , il y a des différences dans la taille des données entre la Date et L'horodatage, donc quand l'intention est d'avoir un champ Date seulement, il est logique de montrer le formatage Date. En outre, "il n'a pas de fraction de secondes ou un fuseau horaire."- ce n'est donc pas le meilleur choix lorsque des informations d'horodatage sont nécessaires.
le champ Date peut être facilement formatée pour montrer la composante de temps dans le développeur SQL Oracle - la requête de Date a couru dans le développeur PL/SQL montre le temps, mais ne montre pas dans le développeur SQL Oracle . Mais il ne montrera pas les secondes fractionnaires ou le fuseau horaire - pour cela, vous avez besoin du type de données Timestamp.
raison: si vous regardez une colonne de données avec un horodatage, le _most_important_ bit d'information est l'année. Si les données ont été dans le db pendant dix ans, c'est important de savoir. donc, l'année qui vient en premier.
c'est logique que le mois suive, puis le jour, l'heure, la minute. Objectivement, il s'agit de la séquence la plus logique pour l'affichage des données temporelles.
il est également logique que si vous allez afficher les données par par défaut, vous ne devriez afficher que la partie la plus significative des données, donc par défaut, seulement Y-M-D. Tout le reste peut être affiché, mais il ne encombrent pas votre rapport sql par défaut.
L'ordre Par date est logique si vous affichez Y-M-D parce qu'il est séquentiel. Les ordinateurs sont bons pour la séquence, et ça a l'air logique.
enfin. Votre parti pris pour vouloir M-D-Y est votre parti pris. Même aux États-Unis, tout le monde n'utilise pas ce format. Alors utilisez le plus logique formater et ne pas être scandalisé lorsque d'autres décident d'être logique par défaut.
(je suis Nous né, et je ne représente pas Oracle. Par contre, je peux penser par moi-même)
pour répondre à votre question C'est pourquoi la date par défaut n'affiche pas TIME part, la seule réponse que je trouve est
les équipes Oracle sont composées de développeurs paresseux ou de responsables :-)
pourquoi ?
car des types de données DATE, TIME et DATETIME existent dans SQL et Oracle ne l'a pas encore implémenté !!!
c'est une honte pour Oracle.
Mais la bonne réponse pour votre problème n'est pas de définir un format de correction par défaut mais un format significatif par défaut qui affiche seulement des chiffres significatifs de sorte que la DATE, L'heure ou les valeurs DATETIME affiché (par défaut) contient toujours tous les chiffres importants.
exemple:
2015-10-14 will be displayed as 2015-10-14 (or default DATE format)
2018-10-25 12:20:00 will be displayed as 2018-10-25 12:20
1994-04-16 16 will be displayed as 1994-04-16 16
le principe est simple.
tous les chiffres faisant partie de la DATE seront toujours affichés comme partie entière du numéro flottant. Pour la partie TIME, seule la partie significative sera affichée comme pour la partie décimale dans le nombre de flotteur. Naturellement, pour le type de temps (seulement HH: MM: SS), la partie DATE n'est jamais affichée.