Oracle
 sql >> Base de données >  >> RDS >> Oracle

Bogue Oracle 11.1 convertissant le numéro de jour julien en DATE ou TIMESTAMP

Lorsque vous essayez de voir ce qu'Oracle est censé faire, regardez le documentation , "Un numéro de jour julien est le nombre de jours depuis le 1er janvier 4712 avant JC."

Cette formulation semble impliquer que le 1er julien serait un jour depuis le 1er janvier 4712 avant JC, en d'autres termes le 2 janvier. Cependant, l'implémentation actuelle du calcul de la date julienne est en place depuis longtemps, avec le code existant en fonction du comportement . (Je sais que nous serions foutus si la définition de Julian implémentée dans Oracle devait changer.) À ce stade, il s'agirait tout au plus d'un bogue de documentation depuis le 31 décembre 4713 avant JC.

MODIFIER Trouvé une référence pour Julian 1 étant le 1er janvier, dans Guide du programmeur d'interface d'appel . Pas un endroit que les programmeurs de base de données normaux ne regarderaient jamais.

Ce qui suit explique la différence d'année entre wikipedia et Oracle :

Le cas 3 est nouveau pour moi. Merci de le rappeller. Je ne connais aucune référence couvrant ce comportement. Connexe :

SQL> select to_date('0001-01-01', 'YYYY-MM-DD') 
    - to_date ('-0001-12-31', 'SYYYY-MM-DD') from dual;

TO_DATE('0001-01-01','YYYY-MM-DD')-TO_DATE('-0001-12-31','SYYYY-MM-DD')
-----------------------------------------------------------------------
                                                                    367

et

SQL> select months_between(to_date('0001-01-01', 'YYYY-MM-DD')
  2      , to_date ('-0001-12-31', 'SYYYY-MM-DD')) from dual;

MONTHS_BETWEEN(TO_DATE('0001-01-01','YYYY-MM-DD'),TO_DATE('-0001-12-31','SYYYY-MM-DD'))
---------------------------------------------------------------------------------------
                                                                             12.0322581

Apparemment l'année 0 inexistante est une année bissextile.