Mostrando postagens com marcador Máscaras. Mostrar todas as postagens
Mostrando postagens com marcador Máscaras. Mostrar todas as postagens

10 de mai. de 2021

Formatos

    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, $999999D99o 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.


DD     -> Indica o dia
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