Когато работите с функции, които връщат дати, Oracle Database връща тези дати въз основа на стойността на NLS_DATE_FORMAT
параметър.
Има и NLS_TIMESTAMP_FORMAT
параметър и NLS_TIMESTAMP_TZ_FORMAT
параметър, като и двата имат маска за формат на дата и час, която може да се посочи отделно.
Всички тези параметри имат своите стойности по подразбиране, получени от NLS_TERRITORY
параметър (който по подразбиране зависи от операционната система).
Така че, за да промените формата на датата за вашата сесия, можете или да актуализирате NLS_TERRITORY
параметър или изрично актуализирайте всеки параметър поотделно.
Тази статия предоставя примери за проверка и промяна на тези стойности и преглед на резултатите.
Проверете първоначалната настройка
Първо, нека проверим текущата ми настройка за NLS_DATE_FORMAT
параметър:
SELECT PARAMETER, VALUEFROM V$NLS_PARAMETERSWHERE PARAMETER IN ('NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT');
Резултат:
СТОЙНОСТ НА ПАРАМЕТЪР __________________________ _________________________________ NLS_ТЕРИТОРИЯ АВСТРАЛИЯ 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:SSXFF АМ T>Стойността на моя
NLS_TERRITORY
параметърът еАВСТРАЛИЯ
, и така различните параметри за дата и час използват модела на формат по подразбиране за Австралия.Тази стойност влияе върху това как се форматира датата, когато използваме определени функции. Например, ето пример за използване на
SYSDATE
за да върнете текущата дата:ИЗБЕРЕТЕ SYSDATEFROM DUAL;
Резултат:
04/21 августПроменете настройката
Можем да използваме
ALTER SESSION
изявление за промяна на настройката за тези параметри.Имаме възможност да променим всеки от тези параметри поотделно или да променим
NLS_TERRITORY
параметър, който автоматично актуализира всеки от тези параметри имплицитно.Променете
NLS_TERRITORY
ПараметърЕто пример за промяна на
NLS_TERRITORY
параметър:ALTER SESSION SET NLS_TERRITORY ='АМЕРИКА';
Резултат:
Сесията е променена.Нека проверим новите стойности:
SELECT PARAMETER, VALUEFROM V$NLS_PARAMETERSWHERE PARAMETER IN ('NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_code' );
Резултат:
СТОЙНОСТ НА ПАРАМЕТЪР __________________________ _______________________________ NLS_TERRITORY AMERICA NLS_DATE_FORMAT DD-MON-RR NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRТака че можем да видим, че не само територията е актуализирана, но и различните параметри за дата и час също са актуализирани.
Променете само
NLS_DATE_FORMAT
ПараметърЕто пример за актуализиране на
NLS_DATE_FORMAT
параметър:ALTER SESSION SET NLS_DATE_FORMAT ='rr-mm-dd';
Резултат:
Сесията е променена.Нека проверим новата стойност:
ИЗБЕРЕТЕ ПАРАМЕТЪР, VALUEFROM V$NLS_PARAMETERSWHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP ');
Резултат:
СТОЙНОСТ НА ПАРАМЕТЪР __________________________ _______________________________ NLS_TERRITORY AMERICA NLS_DATE_FORMAT rr-mm-dd NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZRКакто се очакваше, само
NLS_DATE_FORMAT
параметърът е променен на новия формат. Останалите остават непроменени.Сега, когато стартираме
SYSDATE
, датата се връща в нашия нов формат, ноSYSTIMESTAMP
връща го с помощта наNLS_TIMESTAMP_TZ_FORMAT
формат, който е непроменен:ИЗБЕРЕТЕ SYSDATE, SYSTIMESTAMPFROM DUAL;
Резултат:
SYSDATE SYSTIMESTAMP ___________ _________________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00