SYSDATE vs CURRENT_DATE


SYSDATE è una funzione di Single-Row che non richiede argomenti. Restituisce l'attuale data e l'ora del sistema operativo su cui risiede il database. Il tipo di dato restituito è DATE e il formato restituito dipende dal valore del parametro di inizializzazione NLS_DATE_FORMAT. Non è possibile utilizzare questa funzione nella costraint di tipo CHECK.

CURRENT_DATE restituisce la data corrente della sessione nella time zone definita secondo il calendario Gregoriano.

select SYSDATE, CURRENT_DATE from DUAL;
11-12-2013 09:25:44 11-12-2013 09:25:44

Utiliziamo le funzioni DBTIMEZONE e SESSIONTIMEZONE per visualizzare il valore "Time Zone" del Database e della Sessione.

select DBTIMEZONE, SESSIONTIMEZONE from DUAL;
+00:00 +01:00
+00:00 Europe/Berlin

Modifichiamo il valore "Time Zone" della sessione.
ALTER SESSION SET TIME_ZONE = '-8:0';
oppure
ALTER SESSION SET TIME_ZONE = 'America/Los_Angeles';

select DBTIMEZONE, SESSIONTIMEZONE from DUAL;
+00:00 -08:00
+00:00 America/Los_Angeles

A questo punto le due date sono diverse:
select SYSDATE , CURRENT_DATE from DUAL;
11-12-2013 09:26:44 11-12-2013 00:26:45

Time Zone Region e Time Zone Offset

Vista del Dizionario Dati che contiene il nome del "Time Zone" e la corrispondente abbreviazione:

select * from  V$TIMEZONE_NAMES where tzname like 'America/Los%';

La funzione TZ_OFFSET restituisce il valore "time zone offset".

SELECT  TZ_OFFSET('America/Los_Angeles')FROM dual;
-08:00

Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione