sábado, 26 de setembro de 2020

Estudando para o exame de certificação Oracle Database SQL | 1Z0-071 - Utilizando funções de conversão e condicionais.

Fala, galera. Tudo bem?

Hoje vou falar um pouco sobre funções de conversão e funções condicionais.

Pode acontecer de precisarmos converter um tipo de dado p/ realizar algum procedimento, as vezes converter um formato de uma data, ou a formatação de um numero, lembre-se que essas conversões acontecem a nível de select, a nível da consulta que estivermos fazendo, e não a nível de banco de dados.

Pra ajudar na demonstração das funções, criarei a tabela abaixo.

CREATE TABLE funcionarios(id_func INT PRIMARY KEY
                                                  ,nm_func VARCHAR2(50)
                                                  ,dt_contratacao  DATE
                                                  ,vl_salario  NUMBER(16,2)
                                                  ,nm_departamento VARCHAR2(20))
/


INSERT INTO funcionarios VALUES(1, 'Antonio Pereira'  ,'04/12/2017', 5500, 'MANUTENCAO');
INSERT INTO funcionarios VALUES(2, 'Luiza Silva'      ,'10/02/2019', 7500, 'TECNOLOGIA');
INSERT INTO funcionarios VALUES(3, 'Ana Pereira'      ,'15/04/2010', 8000, 'LOGISTICA');
INSERT INTO funcionarios VALUES(4, 'Vinicius Pereira' ,'05/01/2018', 4300, 'MARKETING');
INSERT INTO funcionarios VALUES(5, 'Sergio Bavini'    ,'04/12/2017', 4000, 'RECURSOS HUMANOS')

/

COMMIT
/


Principais funções utilizadas p/ conversão de dados.

TO_NUMER() Converte caracteres p/ numérico, sendo necessário que o dado a ser convertido seja um número.
TO_DATE() Converte números ou caracteres p/ data.
TO_CHAR() Converte dados p/ caractere.

Conversão Implícita.

Acontece quando a literal é passada no mesmo tipo de dado da coluna da tabela, dessa maneira o próprio banco de dados faz  a conversão. 

Exemplos:

SELECT * FROM funcionarios
WHERE vl_salario > 5000









Outro exemplo utilizando um campo de data.

SELECT * FROM funcionarios
 WHERE dt_contratacao > '01/01/2019'


Conversão explicita, é quando na codificação você já informa pro banco de dados o tipo de dado que será utilizado p/ fazer a consulta. 

Exemplo:

SELECT *
  FROM funcionarios
 WHERE vl_salario > to_number(7000);






Vamos agora falar um pouco sobre a função to_char, essa função é necessária quando precisamos recuperar uma informação do banco e alterar sua formatação, alguns exemplos abaixo:

Formatações p/ campos de data.

YYYY - Ano em números
RRRR - Ano em números
YEAR - Ano escrito
MM - Dois dígitos para o mês
MONTH - Mês por escrito
MON - Três letras para abreviação do mês
DY - 3 letras para abreviação do dia da semana
DAY - Nome do dia da semana
DD - Dia

O primeiro campo no select está em sua formatação original, da maneira em que está gravado no banco de dados, as demais colunas demonstram as formatações citadas acima, essas formatações são Case Sensitive, ou seja, dependendo da maneira em que são escritas, o retorno virá em letras maiúsculas ou minusculas.

SELECT dt_contratacao
      ,to_char(dt_contratacao, 'YYYY') ano_numyy
      ,to_char(dt_contratacao, 'rrrr') ano_numrr
      ,to_char(dt_contratacao, 'Year') ano_escrito
      ,to_char(dt_contratacao, 'MM') mes2
      ,to_char(dt_contratacao, 'Month') mes_escrito
      ,to_char(dt_contratacao, 'MON') mes_3abrev
      ,to_char(dt_contratacao, 'DY') dd_3abrev
      ,to_char(dt_contratacao, 'DAY') Dia_sem
      ,to_char(dt_contratacao, 'DD') dia
  FROM funcionarios











Mais formatações possiveis p/ o to_char.

AM    - AM ou PM
CC    - Século
D     - Dia da semana (1-7)
DDD   - Dia do ano
DY    - Dia da semana abreviado ('SUN')
Ddspth - Dia por extenso
FM    - Tira os blanks ou Zeros da esquerda
HH    - Hora do dia (0-12)
HH24  - Hora do dia (0-24)
MI    - Minutos da Hora
MM    - Mês com 2 dígitos
PM    - AM ou PM
RR    - Ano com 2 dígitos - especial
RRRR  - Ano com 4 dígitos
SS    - Segundos do minuto(0 - 59)
SSSSS - Segundos do dia
W     - Semana do Mês
WW    - Semana do Ano
YY    - Ano com 2 dígitos

Mais alguns exemplos de formatação de datas:

SELECT f.dt_contratacao
      ,TO_CHAR(f.dt_contratacao, 'fmDD Month YYYY')AS dt_contratacao       
      ,'Hoje é dia: ' || TO_CHAR(TRUNC(SYSDATE), 'fmDD Month YYYY') || ' ' ||
       'E são exatamente ' || TO_CHAR(SYSDATE, 'hh24:mi:ss') || ' ' ||
       'da' || TO_CHAR(SYSDATE, 'Am')  AS dia_corrente
  FROM funcionarios f;



Agora uns exemplos de formatações de números.

Formatações possíveis.

9 determina a largura de exibição 9999 = 1234
0 exibe zeros a esquerda 09999 = 01234
$ Exibe o dólar = $1234
L Exibe a moeda L9999 = R$1234
D Caractere decimal 9999D = 1234,
. Mostra uma virgula ou ponto 9999.99  = 1234.00
G Separado de grupos 999G9 = 123.4
, Ponto / virgula na posição 999,9 = 123,4
MI Sinal negativo à direita* 9999MI = 1234-*
PR põe valores negativos entre <>* 9999PR = <1234>*
EEEE informa no padrão cientifico 9999EEEE = 1E+03
U Símbolo monetário
S Informa o sinal S9999 = +1234
B Troca valores zero por vazio** B9999 = ‘ ‘ ** 

Alguns exemplos:

SELECT vl_salario
      ,to_char(vl_salario, '999G999G999G999D99')  vl_salario
      ,to_char(vl_salario, 'S999G999G999G999D99') vl_salarioSinal
      ,to_char(vl_salario, 'L999G999G999G999D99') vl_salariomoeda           
      ,to_char(-1234.22, 'B999G999G999G999D99PR') vl_negativo
      ,to_char(-1234.22, 'B999G999G999G999D99MI') vl_sinnegativo     
  FROM funcionarios f




Bom, espero que tenham gostado.


Abs.


Leonardo Silva.

Nenhum comentário:

Postar um comentário

Estudando para o exame de certificação Oracle Database SQL | 1Z0-071 - Comando Merge

Fala, galera. Tudo bem? Hoje vou falar um pouco sobre o comando MERGE. O MERGE é um comando DML que combina as funções de insert, update e d...