Когато работите с функции, които връщат дати, 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