Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да промените формата на датата във вашата сесия на Oracle

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Невалидно име на общ потребител или роля

  2. Разделяне на низ на няколко реда в Oracle

  3. синтактична грешка със заявка за актуализиране при присъединяване към някаква таблица

  4. Трябва ли да индексирам колона(и) с първичен ключ в Oracle

  5. Име на колона на таблицата Oracle с интервал