Você está na página 1de 42

3

Funções de Uma Única Linha

Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Objetivos

Depois
Depois de de completar
completar esta
esta lição,
lição, você
você poderá
poderá
fazer
fazer oo seguinte
seguinte::
•• Descrever
Descrever vários
vários tipos
tipos de
de funções
funções
disponíveis
disponíveis no
no SQL
SQL
•• Usar
Usar funções
funções de
de data,
data, número
número ee caractere
caractere
nas
nas instruções
instruções SELECT
SELECT
•• Descrever
Descrever oo uso
uso das
das funções
funções de de conversão
conversão

3-2 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções SQL

Entrada Saída
Função

arg 1 A função executa


a ação
arg 2
Resultado
valor

arg n

3-3 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Dois Tipos de Funções SQL

Funções

Funções de Funções de
Uma Única Linha Várias Linhas

3-4 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções de Uma Única Linha
•• Manipulam
Manipulam itens
itens de
de dados
dados
•• Aceitam
Aceitam argumentos
argumentos ee retornam
retornam um
um valor
valor
•• Agem
Agem em
em cada
cada linha
linha retornada
retornada
•• Retornam
Retornam um
um resultado
resultado por
por linha
linha
•• Podem
Podem modificar
modificar oo tipo
tipo de
de dados
dados
•• Podem
Podem ser
ser aninhadas
aninhadas

function_name
function_name (coluna|expressão,
(coluna|expressão, [arg1,
[arg1, arg2,...])
arg2,...])

3-5 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções de Uma Única Linha

Caractere

Geral Número
Funções de
Uma Única Linha

Conversão Data

3-6 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções de Caractere
Funções de
caractere

Funções de Conversão de Funções de manipulação


Maiúsculas e Minúsculas de caractere

LOWER CONCAT
UPPER SUBSTR
INITCAP LENGTH
INSTR
LPAD
TRIM

3-7 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções de Conversão de
Maiúsculas e Minúsculas

Converter
Converter maiúsculas
maiúsculas em
em minúsculas
minúsculas para
para
strings
strings de
de caractere
caractere
Função Resultado
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE
INITCAP('SQL Course') Sql Course

3-9 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando Funções de Conversão
de Maiúsculas e Minúsculas
Exibir
Exibir oo número
número de
de funcionário,
funcionário, nome
nome ee
número
número de de departamento
departamento do
do funcionário
funcionário Blake.
Blake.
SQL>
SQL> SELECT
SELECT empno,
empno, ename,
ename, deptno
deptno
22 FROM
FROM emp
emp
33 WHERE
WHERE ename
ename == 'blake';
'blake';
no
no rows
rows selected
selected

SQL> SELECT empno, ename, deptno


2 FROM emp
3 WHERE ename = UPPER('blake');

EMPNO
EMPNO ENAME
ENAME DEPTNO
DEPTNO
---------
--------- ----------
---------- ---------
---------
7698
7698 BLAKE
BLAKE 30
30

3-10 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções de Manipulação
de Caractere
Manipular
Manipular strings
strings de
de caractere
caractere
Função Resultado
CONCAT('Good', 'String') GoodString
SUBSTR('String',1,3) Str
LENGTH('String') 6
INSTR('String', 'r') 3
LPAD(sal,10,'*') ******5000
TRIM('S' FROM 'SSMITH') MITH

3-11 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando as Funções de
Manipulação de Caractere

SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename),


2 INSTR(ename, 'A')
3 FROM emp
4 WHERE SUBSTR(job,1,5) = 'SALES';

ENAME CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A')


---------- ------------------- ------------- ----------------
MARTIN MARTINSALESMAN 6 2
ALLEN ALLENSALESMAN 5 1
TURNER TURNERSALESMAN 6 0
WARD WARDSALESMAN 4 2

3-12 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções Numéricas
•• ROUND:
ROUND: Arredonda
Arredonda valor
valor para
para determinado
determinado
decimal
decimal
ROUND(45.926,
ROUND(45.926, 2)
2) 45.93
45.93
•• TRUNC:
TRUNC: Trunca
Trunca valor
valor para
para determinado
determinado
decimal
decimal
TRUNC(45.926,
TRUNC(45.926, 2)
2) 45.92
45.92

•• MOD:
MOD: Retorna
Retorna oo restante
restante da
da divisão
divisão
MOD(1600,
MOD(1600, 300)
300) 100
100

3-13 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função ROUND

SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),


2 ROUND(45.923,-1)
3 FROM DUAL;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)


--------------- -------------- -----------------
45.92 46 50

3-14 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função TRUNC

SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),


2 TRUNC(45.923,-1)
3 FROM DUAL;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)


--------------- ------------- ---------------
45.92 45 40

3-15 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função MOD
Calcular
Calcular oo restante
restante da
da proporção
proporção do
do salário
salário
para
para comissão
comissão de de todos
todos os
os funcionários
funcionários cujo
cujo
cargo
cargo éé salesman.
salesman.

SQL> SELECT ename, sal, comm, MOD(sal, comm)


2 FROM emp
3 WHERE job = 'SALESMAN';

ENAME SAL COMM MOD(SAL,COMM)


---------- --------- --------- -------------
MARTIN 1250 1400 1250
ALLEN 1600 300 100
TURNER 1500 0 1500
WARD 1250 500 250

3-16 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Trabalhando com Datas

•• O
O Oracle
Oracle armazena
armazena datas
datas em
em um
um formato
formato
numérico
numérico interno:
interno: século,
século, ano,
ano, mês,
mês, dia,
dia,
horas,
horas, minutos,
minutos, segundos.
segundos.
•• O
O formato
formato de
de data
data default
default éé DD-MON-YY.
DD-MON-YY.
•• SYSDATE
SYSDATE éé uma
uma função
função dede retorno
retorno de
de data
data
ee hora.
hora.
•• DUAL
DUAL éé uma
uma tabela
tabela fictícia
fictícia usada
usada para
para
visualizar
visualizar SYSDATE.
SYSDATE.

3-17 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Aritmética com Datas

•• Adicionar
Adicionar ou
ou subtrair
subtrair um
um número
número de,de, ou
ou
para,
para, uma
uma data
data para
para um
um valor
valor de
de data
data
resultante.
resultante.
•• Subtrair
Subtrair duas
duas datas
datas aa fim
fim de
de localizar
localizar oo
número
número dede dias
dias entre
entre estas
estas datas.
datas.
•• Adicionar
Adicionar horas
horas para
para uma
uma data
data dividindo
dividindo oo
número
número dede horas
horas por
por 24.
24.

3-18 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando Operadores Aritméticos
com Datas

SQL> SELECT ename, (SYSDATE-hiredate)/7 WEEKS


2 FROM emp
3 WHERE deptno = 10;

ENAME WEEKS
---------- ---------
KING 830.93709
CLARK 853.93709
MILLER 821.36566

3-19 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções de Data
Função Descrição

MONTHS_BETWEEN Número de meses


entre duas datas

ADD_MONTHS Adiciona meses de calendário


para a data

NEXT_DAY Dia seguinte da data


especificada

LAST_DAY Último dia do mês

ROUND Data de arredondamento

TRUNC Data para truncada

3-20 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando Funções de Data

• MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
19.6774194

• ADD_MONTHS ('11-JAN-94',6) '11-JUL-94'

• NEXT_DAY ('01-SEP-95','FRIDAY') '08-SEP-95'

• LAST_DAY('01-SEP-95') '30-SEP-95'

3-21 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando Funções de Data

• ROUND('25-JUL-95','MONTH') 01-AUG-
95
• ROUND('25-JUL-95','YEAR') 01-JAN-96

• TRUNC('25-JUL-95','MONTH') 01-JUL-
95
• TRUNC('25-JUL-95','YEAR') 01-JAN-95

3-22 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções de Conversão

Conversão de
tipo de dados

Conversão implícita Conversão explícita


de tipo de dados de tipo de dados

3-23 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Conversão Implícita
de Tipo de Dados
Para
Para atribuições,
atribuições, oo Oracle
Oracle Server
Server pode
pode
converter
converter automaticamente
automaticamente oo seguinte
seguinte::
De Para

VARCHAR2 ou CHAR NUMBER

VARCHAR2 ou CHAR DATE

NUMBER VARCHAR2

DATE VARCHAR2

3-24 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Conversão Implícita
de Tipo de Dados

Para
Para avaliação
avaliação da
da expressão,
expressão, oo Oracle
Oracle Server
Server
pode
pode converter
converter automaticamente
automaticamente oo seguinte
seguinte::
De Para

VARCHAR2 ou CHAR NUMBER

VARCHAR2 ou CHAR DATE

3-25 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Conversão Explícita
de Tipo de Dados
TO_NUMBER TO_DATE

NUMBER CHARACTER DATE

TO_CHAR TO_CHAR

3-26 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Função TO_CHAR com Datas

TO_CHAR(data,
TO_CHAR(data, 'fmt')
'fmt')

O
O modelo
modelo dede formato:
formato:
•• Deve
Deve estar
estar entre
entre aspas
aspas simples
simples ee fazer
fazer
distinção
distinção entre
entre maiúsculas
maiúsculas ee minúsculas
minúsculas
•• Pode
Pode incluir
incluir qualquer
qualquer elemento
elemento dede formato
formato
de
de data
data válido
válido
•• Tem
Tem umum elemento
elemento fmfm para
para remover
remover espaços
espaços
preenchidos
preenchidos ou ou suprimir
suprimir zeros
zeros àà esquerda
esquerda
•• É
É separado
separado do do valor
valor de
de data
data por
por uma
uma vírgula
vírgula

3-29 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Elementos de Modelo
de Formato de Data
YYYY Ano completo em números

YEAR Ano por extenso

MM Valor de dois dígitos para mês

Abreviação de três letras do dia


MONTH
da semana
Abreviação de três letras do dia
DY
da semana

DAY Nome completo do dia

3-30 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Elementos de Modelo
de Formato de Data
• Elementos
Elementos de
de hora
hora formatam
formatam aa parte
parte de
de
hora
hora da
da data.
data.
HH24:MI:SS AM 15:45:32 PM
• Adicionar
Adicionar strings
strings de
de caractere
caractere incluindo-as
incluindo-as
entres
entres aspas.
aspas.
DD "of" MONTH 12 of OCTOBER
• Sufixos
Sufixos de
de número
número escrevem
escrevem os
os números
números
por
por extenso.
extenso.
ddspth fourteenth

3-31 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função TO_CHAR
com Datas
SQL> SELECT ename,
2 TO_CHAR(hiredate, 'fmDD Month YYYY') HIREDATE
3 FROM emp;

ENAME HIREDATE
---------- -----------------
KING 17 November 1981
BLAKE 1 May 1981
CLARK 9 June 1981
JONES 2 April 1981
MARTIN 28 September 1981
ALLEN 20 February 1981
...
14 rows selected.

3-32 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Função TO_CHAR com Números
TO_CHAR(número,
TO_CHAR(número, 'fmt')
'fmt')

Use
Use estes
estes formatos
formatos com
com aa função
função TO_CHAR
TO_CHAR
para
para exibir
exibir um
um valor
valor de
de número
número como
como um
um
caractere:
caractere:
9 Representa um número
0 Forces a zero to be displayed
$ Coloca um sinal de dólar flutuante
L Usa o símbolo da moeda local flutuante
. Imprime um ponto decimal
, Imprime um indicador de milhar

3-33 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função TO_CHAR
com Números

SQL> SELECT TO_CHAR(sal,'$99,999') SALARY


2 FROM emp
3 WHERE ename = 'SCOTT';

SALARY
--------
$3,000

3-34 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Funções TO_NUMBER
e TO_DATE
•• Converter
Converter uma
uma string
string de
de caractere
caractere para
para um
um
formato
formato de
de número
número usando
usando aa função
função
TO_NUMBER
TO_NUMBER
TO_NUMBER(carac[,
TO_NUMBER(carac[, 'fmt'])
'fmt'])

•• Converter
Converter uma
uma string
string de
de caractere
caractere para
para um
um
formato
formato de
de data
data usando função TO_DATE
usando aa função TO_DATE

TO_DATE(carac[,
TO_DATE(carac[, 'fmt'])
'fmt'])

3-35 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Formato de Data RR
Ano Atual Data Especificada Formato RR Formato YY
1995 27-OCT-95 1995 1995
1995 27-OCT-17 2017 1917
2001 27-OCT-17 2017 2017
2001 27-OCT-95 1995 2095

Se o ano de dois dígitos for:

0–49 50–99
Se dois A data de devolução A data de devolução
dígitos do 0–49 está no século atual está no século
ano atual seguinte
forem:
A data de devolução A data de devolução
está no século está no século atual
50–99
anterior

3-36 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Função NVL

Converte
Converte nulo
nulo para
para um
um valor
valor real
real
•• Os
Os tipos
tipos de
de dados
dados que
que podem
podem serser usados
usados
são
são data,
data, caractere
caractere ee número.
número.
•• Os
Os tipos
tipos de
de dados
dados devem
devem corresponder
corresponder com
com
–– NVL(comm,0)
NVL(comm,0)
–– NVL(hiredate,'01-JAN-97')
NVL(hiredate,'01-JAN-97')
–– NVL(job,'No
NVL(job,'No Job
Job Yet')
Yet')

3-37 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função NVL

SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm,0)


2 FROM emp;

ENAME SAL COMM (SAL*12)+NVL(COMM,0)


---------- --------- --------- --------------------
KING 5000 60000
BLAKE 2850 34200
CLARK 2450 29400
JONES 2975 35700
MARTIN 1250 1400 16400
ALLEN 1600 300 19500
...
14 rows selected.

3-38 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Função DECODE

Facilita
Facilita pesquisas
pesquisas condicionais
condicionais realizando
realizando
oo trabalho
trabalho de
de uma
uma instrução
instrução CASE
CASE ou
ou IF-
IF-
THEN-ELSE
THEN-ELSE

DECODE(col/express,
DECODE(col/express, pesquisa1,
pesquisa1, resultado1
resultado1
[,
[, pesquisa2,
pesquisa2, resultado2,...,]
resultado2,...,]
[,
[, default])
default])

3-39 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função DECODE

SQL> SELECT job, sal,


2 DECODE(job, 'ANALYST', SAL*1.1,
3 'CLERK', SAL*1.15,
4 'MANAGER', SAL*1.20,
5 SAL)
6 REVISED_SALARY
7 FROM emp;

JOB SAL REVISED_SALARY


--------- --------- --------------
PRESIDENT 5000 5000
MANAGER 2850 3420
MANAGER 2450 2940
...
14 rows selected.

3-40 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Usando a Função DECODE
Exibir
Exibir aa taxa
taxa de
de imposto
imposto aplicável
aplicável para
para cada
cada
funcionário
funcionário dodo departamento
departamento 30.
30.
SQL> SELECT ename, sal,
2 DECODE(TRUNC(sal/1000, 0),
3 0, 0.00,
4 1, 0.09,
5 2, 0.20,
6 3, 0.30,
7 4, 0.40,
8 5, 0.42,
9 6, 0.44,
10 0.45) TAX_RATE
11 FROM emp
12 WHERE deptno = 30;

3-41 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Aninhando Funções

•• As
As funções
funções dede uma
uma única
única linha
linha podem
podem ser
ser
aninhadas
aninhadas emem qualquer
qualquer nível.
nível.
•• Funções
Funções aninhadas
aninhadas são
são avaliadas
avaliadas aa partir
partir do
do
nível
nível mais
mais interno
interno para
para oo nível
nível mais
mais externo.
externo.
F3(F2(F1(col,arg1),arg2),arg3)

Etapa 1 = Resultado 1

Etapa 2 = Resultado 2

Etapa 3 = Resultado 3

3-42 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Aninhando Funções

SQL> SELECT ename,


2 NVL(TO_CHAR(mgr),'No Manager')
3 FROM emp
4 WHERE mgr IS NULL;

ENAME NVL(TO_CHAR(MGR),'NOMANAGER')
---------- -----------------------------
KING No Manager

3-43 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Sumário

Use
Use as
as funções
funções para
para realizar
realizar oo seguinte:
seguinte:
•• Executar
Executar cálculos
cálculos usando
usando dados
dados
•• Modificar
Modificar itens
itens de
de dados
dados individuais
individuais
•• Manipular
Manipular saída
saída para
para grupos
grupos de
de linhas
linhas
•• Alterar
Alterar formatos
formatos de
de data
data para
para exibição
exibição
•• Converter
Converter tipos
tipos de
de dados
dados de
de coluna
coluna

3-44 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.


Visão Geral do Exercício
• Criando consultas que exigem o uso de funções numéricas, de caractere e de data
• Criando consultas que exigem o uso de funções numéricas, de caractere e de data
• Usando concatenação com funções
• Usando concatenação com funções
• Criando consultas que diferenciam entre letras maiúsculas e minúsculas para testar a utilidade das funções de caractere
• Criando consultas que diferenciam entre letras maiúsculas e minúsculas para testar a utilidade das funções de caractere
• Executando cálculos de anos e meses de serviço de um funcionário
• Executando cálculos de anos e meses de serviço de um funcionário
• Determinando a data de revisão para um funcionário
• Determinando a data de revisão para um funcionário

3-45 Copyright  Oracle Corporation, 1999. Todos os direitos reservados.

Você também pode gostar