Vimos como utilizar literais para incluir informações nas nossa consultas, mas há ainda como incrementar o uso de literais ao utilizar FORMATOS, que também podem ser chamados de máscaras, que permitem alterar o modo de exibição de um dado em relação a maneira que este dado está persistido no banco de dados.
Podemos utilizar formatos em números e datas ou ainda para aplicar um padrão de de exibição em um texto.
Formatos de Números
A utilização de formatos em números é feita através das funções TO_NUMBER ou TO_CHAR. No caso da função TO_CHAR os formatos alteram a exibição de um tipo de dado NUMBER, BINARY_FLOAT ou BINARY_DOUBLE para VARCHAR2. Já na utilização da função TO_NUMBER passamos a exibir um dados CHAR ou VARCHAR2 como NUMBER. Lembrando ainda que ao utilizar modelos de formatação os valores exibidos podem ser arredondados de acordo com o formato o que pode exibir no resultado valores # no arredondamento.
No exemplo abaixo, podemos ver a utilização de alguns padrões.
A coluna salary da tabela HR.Employees é do tipo NUMBER, então para conversão utilizamos a função TO_CHAR() seguida da máscara.
Na coluna Tamanho temos a seguinte máscara '$09999.99', onde a inclusão do caractere $ a frente do valor vai exibir este mesmo símbolo no retorno e o 0 indica que caso o número tenha menos dígitos será complementado com 0 a esquerda como no caso da linha 20 onde o valor exibido é $09600.00.
Na coluna Tamanho1 temos o exemplo que caso o valor tenha mais dígitos que a máscara o valor será substituído por #, como vemos nas linhas 16, 17, 18 e 19 do retorno, pois o formato definido é $9999.99 e temos valores como 10000 que excede em uma posição o formato suportado.
Nas colunas CasaDecimal e CasaDecimal1 vemos a utilização de casas decimais nos formatos, na primeira coluna, $999999D99, o D indica que o separador será o que está configurado na parametrização do banco de dados, enquanto na segunda coluna, $9999.99, temos o separador explicito, em ambos os casos, caso o número convertido não tenha casas decimais, será exibido como 00, caso tenha casas decimais será exibido esse valor, conforme exemplo 58.
Na coluna NOME_MOEDA é possível incluir o nome da moeda local de acordo com parametrização do banco de dados, no caso do meu banco de dados sai o BRL, também é possível incluir o símbolo da moeda conforme utilizado na coluna NOTACAO_MOEDA, ainda sobre moedas, temos a coluna NOTACAO_ALTERNATIVA, onde é possível exibir uma outra notação da moeda. Para exibir esses dados é bastante simples, bastando incluir a respectiva letra antes do formato desejado C para o nome da moeda, L para o símbolo da moeda e U para o símbolo alternativo.
Na coluna ApenasInteiro temos um arredondamento do valor, sendo ignorados os valores das casas decimais.
E por fim a coluna SINAL onde podemos exibir o sinal de positivo ou negativo do número, bastando incluir a letra S no formato, podendo ser exibido no início ou final.
Formatos de Datas
Assim como com números é possível utilizar formatos para alterar a exibição de datas, para isso precisamos utilizar uma das funções de conversão TO_DATE, TO_TIMESTAMP ou TO_TIMESTAMP_TZ, também é possível utilizar a função TO_CHAR para conversão de datas em caracteres.
Na imagem abaixo, temos exemplos do uso dos formatos de datas com as funções TO_CHAR, TO_DATE e TO_TIMESTAMP, podemos encontrar os seguintes formatos no exemplo abaixo.
MM -> Indica o mês
YYYY -> Formato para o ano
HH -> Formato para horário de 12 horas
HH24 -> Formato para horário de 24 horas
MI -> Formato para minutos
SS -> Formato para segundos
FF9 -> Formato para fração de segundos, onde o 9 é a quantidade de casas decimais, podendo ser entre 1 e 9, caso a precisão seja ignorada retornará o padrão.
Opções para exibir o dia.
Além da opção DD que exibe o dia, podemos utilizar o formato DAY que exibirá o nome do dia ou então DY que irá exibir as 3 primeiras letras do nome do dia, a exibição irá depender da maneira como for colocado o formato, por exemplo, DAY irá retornar DOMINGO, enquanto Day retornará Domingo e day o retorno será domingo. Da mesma maneira DY trará DOM, enquanto Dy o resultado será Dom e dy dom.
Ainda para dias, temos as opções de exibir a data informando o dia da semana na forma de número onde 1 é domingo e 7 sábado para isso utilizamos a formato d, ou exibir o data na forma de dia do ano utilizando o formato ddd.
Opções para exibir o mês
Assim como para os dias, para os meses também é possível exibir no formato por extenso ou abreviado, para exibir abreviado utilizamos o formato MON e por extenso o formato MONTH e também como os dias, a forma que o formato é passado na máscara será exibido no retorno, caso MONTH será MAIO, caso Month o retorno será Maio e no caso de month teremos maio. Nos casos que o formato configurado seja da maneira abreviada, teremos o retorno apenas das 3 primeiras letras, conforme o exemplo o retorno seria MAI. Existe também a possibilidade de exibir o mês em algarismo romano, para isso é necessário utilizar o formato RM.
Formatos DL e DS
Os formatos DL e DS são formatos exibidos de acordo com as configurações NLS do banco, onde o DL é o formato longo e o DS o formato curto.
Formatos de semana
Também temos formatos para retornar uma data com dados da semana. Onde através do formato W temos a semana do mês da data informada e usando o formato WW temos a semana do ano da data informada. Há ainda a possibilidade de utilizar o formato IW que é a semana do ano de acordo com o padrão ISO, ou seja, a primeira semana não necessariamente será semana do dia 01 de janeiro, mas sim a primeira semana que tem ao menos 4 dias no novo ano.
Sufixos para datas
Há também a possibilidade de incluir sufixos para as formatações de datas da forma que as datas sejam exibidas de forma ordinal, escrita ou combinada. As opções para as máscaras de formatos são: SP, TH ou THSP/SPTH. Vamos ver alguns exemplos práticos de uso.
Durante provas de certificação atentar nesse ponto, pois existem pegadinhas com a exibição de dados utilizando essas formatações. Por exemplo, embora a sintaxe TH esteja maiúscula, caso o dia(DD) esteja minúsculo será exibido minúsculo.
FX e FM
Nas sintaxes de formatos para datas é possível incluir FX ou FM, e o que acontece ao adicionar FX ou FM no formato? Basicamente, FX se refere ao formato exato, ou seja, a máscara deve estar idêntica ao conteúdo que se deseja converter. Enquanto o FM é o modo de preenchimento, em que o conteúdo pode ser preenchido com espaços ou 0 para completar o formato, no caso do FM ainda é possível utilizar um separador diferente do formato.
Formato do Ano
Para anos temos 2 possibilidades de formatos podemos utilizar o RRRR (RR) ou o formato YYYY (YY). O recomendado é a utilização do formato YYYY, pois esse formato elimina a ambiguidade e não prejudica a otimização das consultas. O formato RR é similar ao YY, contudo tem particularidades referentes ao século que basicamente permite armazenar anos de século 20 estando no século 21. Quando utilizamos o formato YY, os 2 primeiros dígitos serão sempre iguais do ano atual, porém quando utilizamos o formato RR os 2 primeiros dígitos vão depender dos 2 últimos dígitos da data e também dos 2 últimos dígitos do ano atual.
Caso os 2 dígitos retornados para o ano sejam entre 00 e 49:
- Se os 2 últimos dígitos do ano atual estiverem entre 00 e 49:
será retornado os mesmos 2 dígitos do ano atual.
- Se os 2 últimos dígitos do ano atual estiverem entre 50 e 00:
será retornado 1 número maior que os 2 dígitos do ano atual.
Caso os 2 dígitos retornados para o ano sejam entre 50 e 99:
- Se os 2 últimos dígitos do ano atual estiverem entre 00 e 49:
será retornado 1 número menor que os 2 dígitos do ano atual.
- Se os 2 últimos dígitos do ano atual estiverem entre 50 e 00:
será retornado os mesmos 2 dígitos do ano atual.
Fonte:
https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Format-Models.html#GUID-DFB23985-2943-4C6A-96DF-DF0F664CED96