Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como alterar o formato de data em sua sessão Oracle


Ao trabalhar com funções que retornam datas, o Oracle Database retorna essas datas com base no valor do NLS_DATE_FORMAT parâmetro.

Há também um NLS_TIMESTAMP_FORMAT parâmetro e um NLS_TIMESTAMP_TZ_FORMAT parâmetro, ambos com uma máscara de formato de data e hora que pode ser especificada separadamente.

Todos esses parâmetros têm seus valores padrão derivados do NLS_TERRITORY parâmetro (que, por padrão, é dependente do sistema operacional).

Portanto, para alterar o formato de data da sua sessão, você pode atualizar o NLS_TERRITORY parâmetro ou atualizar explicitamente cada parâmetro individualmente.

Este artigo fornece exemplos de como verificar e alterar esses valores e exibir os resultados.

Verifique a configuração inicial


Primeiro, vamos verificar minha configuração atual para o NLS_DATE_FORMAT parâmetro:
SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Resultado:
                 PARAMETER                             VALUE 
__________________________ _________________________________ 
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:SSXFF AM TZR    

O valor do meu NLS_TERRITORY parâmetro é AUSTRALIA , e assim os vários parâmetros de data e hora usam o modelo de formato padrão para a Austrália.

Esse valor afeta como a data é formatada quando usamos determinadas funções. Por exemplo, aqui está um exemplo de uso de SYSDATE para retornar a data atual:
SELECT SYSDATE
FROM DUAL;

Resultado:
04/AUG/21

Alterar a configuração


Podemos usar o ALTER SESSION instrução para alterar a configuração desses parâmetros.

Temos a opção de alterar cada um desses parâmetros individualmente ou alterar o NLS_TERRITORY parâmetro, que atualiza automaticamente cada um desses parâmetros implicitamente.

Alterar o NLS_TERRITORY Parâmetro


Aqui está um exemplo de como alterar o NLS_TERRITORY parâmetro:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';

Resultado:
Session altered.

Vamos verificar os novos valores:
SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Resultado:
                 PARAMETER                           VALUE 
__________________________ _______________________________ 
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    

Assim, podemos ver que, não só o território foi atualizado, mas os vários parâmetros de data e hora também foram atualizados.

Alterar apenas o NLS_DATE_FORMAT Parâmetro


Aqui está um exemplo de atualização do NLS_DATE_FORMAT parâmetro:
ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';

Resultado:
Session altered.

Vamos verificar o novo valor:
SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Resultado:
                 PARAMETER                           VALUE 
__________________________ _______________________________ 
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    

Como esperado, apenas o NLS_DATE_FORMAT parâmetro foi alterado para o novo formato. Os demais permanecem inalterados.

Agora, quando executamos SYSDATE , a data é retornada em nosso novo formato, mas SYSTIMESTAMP retorna usando o NLS_TIMESTAMP_TZ_FORMAT formato, que permanece inalterado:
SELECT 
    SYSDATE,
    SYSTIMESTAMP
FROM DUAL;

Resultado:
    SYSDATE                              SYSTIMESTAMP 
___________ _________________________________________ 
21-08-09    09-AUG-21 07.22.35.402453000 PM -04:00