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

Como adicionar o indicador de Meridiem (AM/PM) a um valor de tempo no Oracle


Ao usar o TO_CHAR() função para formatar um valor de data e hora no banco de dados Oracle, você pode adicionar o indicador de meridiem (AM/PM) simplesmente adicionando A.M. ou PM ao seu modelo de formato.

O Oracle então exibe o indicador de meridiano apropriado, dependendo se o valor de tempo é AM ou PM.

Você pode fornecê-lo em qualquer maiúscula ou minúscula e com ou sem pontos (por exemplo, A.M. , A.M. am , a.m , etc). O Oracle exibirá o indicador de meridiano conforme especificado.

Exemplo


Segue um exemplo para demonstrar:
SELECT TO_CHAR(timestamp '2030-12-30 08:30:45', 'HH:MI:SS AM') 
FROM DUAL;

Resultado:
08:30:45 AM

Neste caso, a hora é ante meridiem e, portanto, o resultado tem A.M. anexado.

AM vs PM


O bom disso é que o Oracle calcula se é AM ou PM e exibe o indicador de meridiano aplicável.

Então aqui está o que acontece quando eu mudo o tempo para um valor PM:
SELECT TO_CHAR(timestamp '2030-12-30 18:30:45', 'HH:MI:SS AM') 
FROM DUAL;

Resultado:
06:30:45 PM

O indicador de meridiem agora é PM, mesmo que minha string de formato seja A.M. . A Oracle foi inteligente o suficiente para saber que o tempo é pós-meridiem.

Maiúsculas x Minúsculas


Alterar o caso do elemento de formato altera o caso do resultado:
SELECT 
    TO_CHAR(timestamp '2030-12-30 18:30:45', 'HH:MI:SS AM') AS "Uppercase",
    TO_CHAR(timestamp '2030-12-30 18:30:45', 'HH:MI:SS am') AS "Lowercase",
    TO_CHAR(timestamp '2030-12-30 18:30:45', 'HH:MI:SS Am') AS "Mixed"
FROM DUAL;

Resultado:
     Uppercase      Lowercase          Mixed 
______________ ______________ ______________ 
06:30:45 PM    06:30:45 pm    06:30:45 Pm    

Pontos x Sem Pontos


Você pode incluir pontos se preferir:
SELECT 
    TO_CHAR(timestamp '2030-12-30 18:30:45', 'HH:MI:SS A.M.') AS "Uppercase",
    TO_CHAR(timestamp '2030-12-30 18:30:45', 'HH:MI:SS a.m.') AS "Lowercase",
    TO_CHAR(timestamp '2030-12-30 18:30:45', 'HH:MI:SS A.m.') AS "Mixed"
FROM DUAL;

Resultado:
       Uppercase        Lowercase            Mixed 
________________ ________________ ________________ 
06:30:45 P.M.    06:30:45 p.m.    06:30:45 P.M.   

No entanto, observe que isso afetou o indicador de meridiano de maiúsculas e minúsculas.

Data e hora de hoje


Aqui, passo SYSDATE para obter a data/hora atual:
SELECT 
    TO_CHAR(SYSDATE, 'HH:MI:SS A.M.')
FROM DUAL;

Resultado:
07:55:57 P.M.