Après avoir exécuté ce SQL dans Oracle 10g:
SELECT SYSDATE, CURRENT_TIMESTAMP FROM DUAL
Je reçois cette sortie étrange:
Quelle est la cause de la différence de temps? L'heure du serveur est égale à la valeur SYSDATE
CURRENT_DATE
et CURRENT_TIMESTAMP
renvoie la date et l'heure actuelles dans le fuseau horaire de la session.
SYSDATE
et SYSTIMESTAMP
retourne la date et l'heure du système, c'est-à-dire du système sur lequel réside la base de données.
Si votre session client ne correspond pas au fuseau horaire correspondant au serveur sur lequel se trouve la base de données (ou indique que ce n'est pas le cas, via vos paramètres NLS), le fait de mélanger les fonctions SYS*
et CURRENT_*
donnera des valeurs différentes. Ils sont tous corrects, ils représentent simplement des choses différentes. Il semble que votre serveur se trouve (ou le pense) dans un fuseau horaire +4: 00, alors que votre session client est dans un fuseau horaire +4: 30.
Vous pouvez également voir de petites différences dans le temps si les horloges ne sont pas synchronisées, ce qui ne semble pas être un problème ici.
SYSDATE
, SYSTIMESTAMP
renvoie la date et l'horodatage de la base de données, alors que current_date
, current_timestamp
renvoie la date et l'horodatage de l'emplacement depuis lequel vous travaillez.
Pour par exemple. travaillant depuis l’Inde, j’accède à une base de données située à Paris. à 16h00 IST:
select sysdate,systimestamp from dual;
Cela me renvoie la date et l'heure de Paris:
RÉSULTAT
12-MAY-14 12-MAY-14 12.30.03.283502000 PM +02:00
select current_date,current_timestamp from dual;
Cela me renvoie la date et l'heure de l'Inde:
RÉSULTAT
12-MAY-14 12-MAY-14 04.00.03.283520000 PM ASIA/CALCUTTA
Veuillez noter le décalage horaire de 3h30.
SYSDATE renvoie la date système du système sur lequel réside la base de données
CURRENT_TIMESTAMP renvoie la date et l'heure actuelles dans le fuseau horaire de la session, dans une valeur de type de données TIMESTAMP WITH TIME ZONE.
exécuter cette commande
ALTER SESSION SET TIME_ZONE = '+3:0';
et cela vous donnera le même résultat.
SYSDATE
fournit la date et l'heure d'un serveur.CURRENT_DATE
indique la date et l'heure du client (c'est-à-dire votre système).CURRENT_TIMESTAMP
fournit les données et l'horodatage d'un clinet.Remarque: SYSDATE - renvoie uniquement la date, c’est-à-dire que "aaaa-mm-jj" n’est pas correct. SYSDATE renvoie la date système du serveur de base de données, y compris les heures, les minutes et les secondes. Par exemple:
SELECT SYSDATE FROM DUAL; retournera une sortie semblable à celle-ci: 12/15/2017 12:42:39 PM