-
Notifications
You must be signed in to change notification settings - Fork 0
/
Funcoes.sql
101 lines (79 loc) · 3.94 KB
/
Funcoes.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*FUNÇÕES SÃO OPERAÇÕES EM CONSULTAS.
VAMOS COMEÇAR COM OPERAÇÕES EM VARCHARS(STRINGS)
NA ORDEM TEMOS: UPPER - DEIXAR TUDO MAIÚSCULOS. LOWER - TUDO MINÚSCULO.
INITCAP - DEIXA A PRIMEIRA LETRA MAIÚSCULA
CONCAT - CONCATENA*/
SELECT NOME, UPPER(NOME), LOWER(NOME), INITCAP(NOME),
CONCAT(ENDERECO_1,BAIRRO)
FROM TABELA_DE_CLIENTES;
/*OUTRA FORMA DE CONCATENAR*/
SELECT NOME, 'ENDEREÇO:' || ENDERECO_1 || ' ' || BAIRRO||' '||CIDADE||' '|| ESTADO ||' '||'CEP:' || CEP AS ENDEREÇO_COMPLETO
FROM TABELA_DE_CLIENTES;
/*O LPAD E O RPAD COMPLETRA O VARCHAR COM CARACTERES ATÉ O VARCHAR INTEIRO TER UMA QUANTIADE
DE CARACTERES ESPECIFICADO. A DIFERENÇA É QUE LPAD COMPLETRA A ESQUERDA E RPAD COMPLETA A DIREITA.*/
SELECT NOME, LPAD(NOME,25, '*') FROM TABELA_DE_CLIENTES;
/*O SUBSTR SELECIONA UMA FAIXA DE CARACTERES A SE PEGAR
ENQUANTO O INSTR PROCURA A PRIMEIRA POSIÇÃO DA LETRA PEDIDA*/
SELECT NOME, SUBSTR(NOME, 2,6), INSTR(NOME, 'a') FROM TABELA_DE_CLIENTES;
/*O RTRIM E O LTRIM RETORNA O VARCHAR CORTANDO ESPAÇOS EM BRANCO.
O DUAL SERVE PARA ESPECIFICAR QUE NÃO É NENHUMA TABELA QUE QUERO*/
SELECT LTRIM(' OLÁ'), RTRIM('HELLO WORLD ') FROM DUAL;
/*REPLACE APRESENTA O VARCHAR TROCADO POR ALGO QUE EU QUERO*/
SELECT NOME_DO_PRODUTO, REPLACE(NOME_DO_PRODUTO, 'Litro','L') FROM TABELA_DE_PRODUTOS;
/*--------------------------------------------------------------------------------------*/
/*FUNÇÕES DO TIPO DATA*/
/*SYSDATE DEVOLVE O DIA ATUAL E O TO_CHAR PERMITE COM QUE EU ESPECIFIQUE COMO QUERO A DATA*/
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH:MM:SS')AS DATA FROM DUAL;
/*A SOMA, SUBTRAÇÃO É DADA POR DIAS*/
SELECT SYSDATE+10 FROM DUAL;
/*MONTHS_BETWEEN MOSTRA A DIFERENÇA ENTRE DUAS DATAS.
TO DATE TRANSFORMA O VARCHAR EM DATA*/
SELECT MONTHS_BETWEEN(TO_DATE(' 2023/01/01','YYYY-MM-DD'),SYSDATE) FROM DUAL;
/*ADD_MONTHS SOMA DATAS*/
SELECT ADD_MONTHS(SYSDATE, 10) FROM DUAL;
/*NEXT_RETORNA QUAL É O PROXIMO DIA DA SEMANA
LAST_DAY RETORNA ÚLTIMA DIA DO MEU MÊS*/
SELECT NEXT_DAY(SYSDATE, 'TERÇA'), LAST_DAY(SYSDATE) FROM DUAL;
/*O TRUNC RETORNA O PRIMEIRO DIA DE UM PARÂMETRO, E O ROUND ARREDONDA*/
SELECT TRUNC(SYSDATE,'YEAR'), ROUND(SYSDATE, 'MONTH') FROM DUAL;
SELECT NOME, MONTHS_BETWEEN (SYSDATE, DATA_DE_NASCIMENTO)/12 AS IDADE
FROM tabela_de_clientes;
/*--------------------------------------------------------------------*/
/*FUNÇÕES MATEMÁTICAS*/
/*ROUND ARRENDONDA VALORES FLOAT.
O CEIL ARREDONDA SEMPRE PRA CIMA.
FLOOR ARREDONDA SEMPRE PARA BAIXO.
POWER ELEVA A UMA POTENCIA
EXP É O EXPONENCIAL DE A UM NÚMERO
SQRT É RAIZ*/
SELECT PRECO_DE_LISTA, ROUND(PRECO_DE_LISTA,2),
CEIL(PRECO_DE_LISTA), FLOOR(PRECO_DE_LISTA) ,
POWER(PRECO_DE_LISTA,2), EXP(PRECO_DE_LISTA),
SQRT(PRECO_DE_LISTA) FROM TABELA_DE_PRODUTOS;
/*ABS É O MÓDULO DE UM VALOR.
SIGN RETORNA O SINAL DO VALOR
MOD RETORNA O RESTO DA DIVISÃO*/
SELECT ABS(-10), SIGN(-1), MOD(10,6) FROM DUAL;
SELECT TO_CHAR(DATA_VENDA, 'YYYY'), FLOOR(SUM(IMPOSTO*QUANTIDADE*PRECO)) AS IMPOSTO FROM
NOTAS_FISCAIS A INNER JOIN ITENS_NOTAS_FISCAIS B
ON A.NUMERO = B.NUMERO
WHERE TO_CHAR(DATA_VENDA, 'YYYY')= 2016
GROUP BY TO_CHAR(DATA_VENDA, 'YYYY');
/*-----------------------------------------------------------------------------------*/
/*FUNÇÕES DE CONVERSÃO*/
/*TO_DATE TRANSFORMA STRING EM DATA; TO_CHAR TRANSFORMA EM STRING.
AMBOS DEVEM SER ESPECIFICADO COMO DEVERÁ SER MOSTRADO.
EXTRACT PEGA UM TERMO DA DATA, E DEVE SER ESPECIFICA O QUE QUER.*/
SELECT TO_DATE('12/11/1999', 'DD/MM/YYYY'), TO_CHAR(SYSDATE, 'MM/DD/YYYY'),
EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
/*TO NUMBER PEGA UMA STRING E TRANSFORMAR EM NÚMERO.
NVL TRANSFORMA NULO EM ALGO DESEJADO.
GREATEST MOSTRA O MAIOR VALOR.*/
SELECT TO_NUMBER('110') + 100,
NVL(NULL, 10),
GREATEST (10,25,3) FROM DUAL;
SELECT DISTINCT 'CLIENTE '||NOME || ' FATUROU', SUM(QUANTIDADE*PRECO) AS FATURAMENTO FROM
(SELECT * FROM NOTAS_FISCAIS A INNER JOIN ITENS_NOTAS_FISCAIS B
ON A.NUMERO = B.NUMERO)C INNER JOIN TABELA_DE_CLIENTES D
ON C.CPF = D.CPF WHERE TO_CHAR(DATA_VENDA,'YYYY') = 2016
GROUP BY NOME;