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

Como obter o século de uma data no Oracle


Com o Oracle Database, podemos usar o TO_CHAR(datetime) função para retornar o século de um valor de data e hora.

Para fazer isso, podemos usar o CC elemento de formato, ou o SCC elemento de formato. Podemos combiná-los com outros elementos de formato para fazer coisas como exibir o número ordinal, soletrar o século, etc.

Exemplo


Aqui está um exemplo que usa o CC elemento de formato para retornar o século de um valor de data:
SELECT TO_CHAR(DATE '2030-12-30', 'CC')
FROM DUAL;

Resultado:
21

Séculos negativos


Podemos usar o SCC elemento de formato para incluir o sinal de menos ao passar uma data negativa:
SELECT TO_CHAR(DATE '-2030-12-30', 'SCC')
FROM DUAL;

Resultado:
-21

Número Ordinal


Podemos adicionar o TH elemento de formato para retornar o número ordinal do século.
SELECT TO_CHAR(DATE '2030-12-30', 'CCTH')
FROM DUAL;

Resultado:
21ST

Também podemos adicionar texto arbitrário para anexar a palavra “Century”:
SELECT TO_CHAR(DATE '2030-12-30', 'CCTH "Century"')
FROM DUAL;

Resultado:
21ST Century

Observe que o texto está entre aspas duplas.

Podemos usar maiúsculas conforme necessário:
SELECT TO_CHAR(DATE '2030-12-30', 'Ccth "Century"')
FROM DUAL;

Resultado:
21ST Century

Observe que eu apenas capitalizei o primeiro caractere no modelo de formato. O que quero dizer é que usei Ccth em vez de CCth . Embora você possa pensar que CCth deve resultar em número ordinal minúsculo, não é assim que funciona. Veja o que acontece quando fazemos isso:
SELECT TO_CHAR(DATE '2030-12-30', 'CCth "Century"')
FROM DUAL;

Resultado:
21ST Century

Basicamente, quando os dois primeiros caracteres do modelo de formato são maiúsculos, o resultado é maiúsculo. Portanto, para produzir maiúsculas e minúsculas, coloque em maiúscula apenas o primeiro caractere do modelo de formato.

Século soletrado


Podemos adicionar o SP elemento de formato para ter o século soletrado:
SELECT TO_CHAR(DATE '2030-12-30', 'CCTHSP "Century"')
FROM DUAL;

Resultado:
TWENTY-FIRST Century

E podemos usar letras maiúsculas conforme necessário:
SELECT TO_CHAR(DATE '2030-12-30', 'Ccthsp "Century"')
FROM DUAL;

Resultado:
Twenty-First Century

Podemos omitir o TH especificador de formato se não quisermos o número ordinal:
SELECT TO_CHAR(DATE '2030-12-30', 'Ccsp')
FROM DUAL;

Resultado:
Twenty-One

Séculos 20 vs 21


As seguintes regras se aplicam quando uma data é considerada no século 20 versus o século 21.
  • Se os dois últimos dígitos de um ano de quatro dígitos estiverem entre 01 e 99 (inclusive), o século será um a mais que os dois primeiros dígitos desse ano.
  • Se os dois últimos dígitos de um ano de quatro dígitos forem 00, o século será igual aos dois primeiros dígitos desse ano.

O mesmo conceito se aplica a outros séculos, como o século 13, século 30, etc.

Exemplo:
SELECT 
    TO_CHAR(DATE '1999-12-30', 'CC') AS "1999",
    TO_CHAR(DATE '2000-12-30', 'CC') AS "2000",
    TO_CHAR(DATE '1299-12-30', 'CC') AS "1299",
    TO_CHAR(DATE '1300-12-30', 'CC') AS "1300",
    TO_CHAR(DATE '2999-12-30', 'CC') AS "2999",
    TO_CHAR(DATE '3000-12-30', 'CC') AS "3000"
FROM DUAL;

Resultado:
   1999    2000    1299    1300    2999    3000 
_______ _______ _______ _______ _______ _______ 
20      20      13      13      30      30     

Há muitos outros elementos de formato disponíveis para formatar valores de data e hora no Oracle. Consulte Lista de elementos de formato de data e hora no Oracle para obter uma lista completa.