Při práci s funkcemi, které vracejí data, Oracle Database vrací tato data na základě hodnoty NLS_DATE_FORMAT
parametr.
K dispozici je také NLS_TIMESTAMP_FORMAT
parametr a NLS_TIMESTAMP_TZ_FORMAT
parametr, oba mají masku formátu data a času, kterou lze zadat samostatně.
Všechny tyto parametry mají své výchozí hodnoty odvozené z NLS_TERRITORY
parametr (který je ve výchozím nastavení závislý na operačním systému).
Chcete-li tedy změnit formát data pro svou relaci, můžete aktualizovat NLS_TERRITORY
nebo explicitně aktualizujte každý parametr jednotlivě.
Tento článek poskytuje příklady kontroly a změny těchto hodnot a zobrazení výsledků.
Zkontrolujte počáteční nastavení
Nejprve zkontrolujeme mé aktuální nastavení pro NLS_DATE_FORMAT
parametr:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
);
Výsledek:
Hodnota parametru __________________________ _________________________________ nls_territory Australia nls_date_format dd/mon/rr nls_timestamp_format dd/mon/rr Hh12:mi:ssxff am nls_timestamp_tz_format dd/mon/rr hh12:mI:/ss am thfff am am am am am am am am am am am.Hodnota mého
NLS_TERRITORY
parametr jeAUSTRALIA
, a tak různé parametry datetime používají výchozí model formátu pro Austrálii.Tato hodnota ovlivňuje způsob formátování data, když používáme určité funkce. Zde je například příklad použití
SYSDATE
vrátit aktuální datum:SELECT SYSDATE FROM DUAL;
Výsledek:
04/AUG/21Změnit nastavení
Můžeme použít
ALTER SESSION
pro změnu nastavení těchto parametrů.Máme možnost změnit každý z těchto parametrů jednotlivě nebo změnit
NLS_TERRITORY
parametr, který automaticky implicitně aktualizuje každý z těchto parametrů.Změňte
NLS_TERRITORY
ParametrZde je příklad změny
NLS_TERRITORY
parametr:ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Výsledek:
Relace změněna.Pojďme zkontrolovat nové hodnoty:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Výsledek:
HODNOTA PARAMETRU __________________________ _______________________________ NLS_TERRITORY AMERIKA NLS_DATE_FORMAT HMPHTZRR NLS_DATE_FORMAT DD-MON-RR SSDDFFX MON. TIMESTAMP.Vidíme tedy, že nejenže bylo aktualizováno území, ale také byly aktualizovány různé parametry data a času.
Změňte pouze
NLS_DATE_FORMAT
ParametrZde je příklad aktualizace
NLS_DATE_FORMAT
parametr:ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';
Výsledek:
Relace změněna.Pojďme zkontrolovat novou hodnotu:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Výsledek:
HODNOTA PARAMETRU ___________________________ _______________________________ NLS_TERRITORY AMERIKA NLS_DATE_FORMAT rr-mm-d d NLS_FFDD MONHMISTAMP. X.- FF RR MON.Podle očekávání pouze
NLS_DATE_FORMAT
parametr byl změněn na nový formát. Ostatní zůstávají nezměněny.Nyní, když spustíme
SYSDATE
, datum je vráceno v našem novém formátu, aleSYSTIMESTAMP
vrátí jej pomocíNLS_TIMESTAMP_TZ_FORMAT
formát, který se nemění:SELECT SYSDATE, SYSTIMESTAMP FROM DUAL;
Výsledek:
SYSDATE SYSTIMESTAMP ____________ __________________________________________ 21-08-09 09-AUG-21 07.22.35 04:05 07.22.33 40:00