Vous êtes sur la page 1sur 39

Banco de Dados Clculos e

funes
Prof. Camilo de Lelis
Aula 5

Operadores
Operador

Ao

Soma/Adio

Subtrao

Multiplicao

Diviso

Funes numricas

POSITION/INSTR

CHARACTER_LENGTH

POSITION/INSTR

O objetivo de ambas as funes


retornar a posio do caractere de
busca na cadeia de caracteres origem.

Sintaxe

POSITION(destino IN origem)

INSTR( origem, destino [, inicio, [fim]])

Tipo

Descrio

Destino

Cadeia de caracteres que se quer pesquisar.

Origem

Cadeia de caracteres em que ser realizada a pesquisa

Incio

Posio inicial de busca (se no especificada inicia na


posio 1.

Fim

Ocorrncia que deve ser pesquisada(se no especificada,


indica que a primeira ocorrncia.

Exemplos

Retorna a posio do caractere de busca na


cadeia de caracteres de origem
POSITION (destino IN origem)
Exemplo:
SELECT POSITION (Ru In Renato Russo )
AS BUSCA;

Insere o nome BUSCA no cabealho da coluna

INSTR

Mesma funo do anterior.


INSTR(origem, destino [, incio, [fim]])
No funciona no PostgreSQL

Exemplo
SELECT INSTR(Renato Russo, Ru)
AS BUSCA;

Insere o nome BUSCA no cabealho da coluna

CHARACTER_LENGTH

Retorna o nmero de caracteres contidos em


uma cadeia de caracteres

SELECT CHARACTER_LENGTH(Renato Russo)


AS TAM ;
Insere o nome TAM no cabealho da coluna

Concatenando

Para concatenar cadeias de caracteres,


utilizando dois pipes (||).
SELECT NOME_GRAVADORA || ||
CONTATO FROM GRAVADORA;

Utilize no MySQL a funo CONCAT(PARAMETROS)

Upper

Na realizao de buscas realizada uma


comparao com maisculas.

Exemplo:

SELECT * FROM AUTOR


WHERE UPPER(NOME_AUTOR) LIKE ROBERTO%

LOWER

Faz a converso para minsculos.

Exemplo:

SELECT * FROM AUTOR


WHERE LOWER(NOME_AUTOR) LIKE
roberto%

TRIM

Utilizado para retirar caracteres antes e/ou


depois de outra cadeia de caracteres.

Sintaxe:
TRIM [{BOTH | LEADING | TRAILING} car FROM ]
cadeia )

Exemplos de utilizao
teste

Retira espaos antes e


depois
da palavra teste

TRIM(BOTH # FROM #
teste)

teste

Retira o smbolo # que


estava antes e depois (Both)
da cadeia de caracteres.

TRIM(LEADING FROM
teste

teste

Retira o espao que estava


antes da palavra teste.

TRIM(TRAILING FROM
teste

teste

Retira o espao que estava


aps a palavra

TRIM(teste)

SUBSTRING

Retorna parte de uma cadeia de caracteres.

Sintaxe:
SELECT SUBSTRING( cadeia_origem FROM
posio_inicio FOR nmero_caracteres )

Exemplo
SELECT SUBSTRING( NOME_AUTOR
FROM 1 FOR 3 ) as RES, NOME_AUTOR
FROM AUTOR
WHERE NOME_AUTOR LIKE R%

TRANSLATE

Serve para pesquisar e substituir caracteres


em uma cadeia de caracteres.

TRANSLATE(caracteres, pesquisa,substituio)

Exemplo:
SELECT TRANSLATE( UPPER(NOME_AUTOR),
RT, AB )
Todas as letras R sero
substitudas pela letra A
e as letras T pela letra B
FROM AUTOR
WHERE CODIGO_AUTOR = 1;

Replace

Substitui uma cadeia de caracteres por


outra.
Sintaxe:
SELECT REPLACE(
UPPER(NOME_AUTOR),RT,AB)
FROM AUTOR
WHERE CODIGO_AUTOR =1; No acontece nada.

Exemplo:
SELECT REPLACE(
UPPER(NOME_AUTOR),RE,AB)
FROM AUTOR
WHERE CODIGO_AUTOR =1;

Mudana do
inicio do nome

Manipulao de datas

Tipos de dados relacionados com a data e


hora

Tipo

Descrio

DATE
Apenas Data
Time
Apenas Hora
TIMESTAMP Data e Hora
Intervalo entre os dois tipos de
INTERVAL
dados anteriores

Foram definidos algumas funes para


determinar a data e/ou hora atuais do
sistema. Acrescentando CURRENT_
antes
dos
trs
primeiros
tipos
anteriores:
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP

Para converter o formato da


data no MySQL

SELECT
DATE_FORMAT(nome_da_coluna_com_
a_data, '%d/%m/%Y') FROM
nome_da_tabela;

Exemplo:

Para saber quais os CDs lanados no dia


de hoje:

SELECT * FROM CD
WHERE DATA_LANCAMENTO =
CURRENT_DATE;

OPERAES ARITMTICAS
COM DATAS

A coluna do tipo data composta de seis


elementos:
YEAR (ano)
MONTH (ms)
DAY (dia)
HOUR(hora)
MINUTE (minuto)
SECOND (segundo)

Operaes:
Expresso

Resultado

DATETIME-DATETIME

INTERVAL

DATETIME INTERVAL DATETIME

INTERVAL INTERVAL INTERVAL

INTERVAL * nmero
INTERVAL/nmero

INTERVAL
INTERVAL

OBS.

Quando usar INTERVAL, especifique em


qual tipo de intervalo se quer visualizar
a resposta (YEAR, MONTH, DAY, etc) e
at indicar o perodo de tempo (YEAR
TO MONTH ou DAY TO SECOND)

Exemplo:

SELECT CURRENT_DATE, DATA_LANCAMENTO,


CURRENT_DATE DATA_LANCAMENTO AS
DIFERENCA
FROM CD;
Encontrar o intervalo de dias
entre duas datas

No MySQL
SELECT current_date, data_lancamento,
DATEDIFF(current_date,'2007,08,30')
from cd;

Adicionar dias em uma data


SELECT DATA_LANCAMENTO + 7
FROM CD;

Somente
se
for dentro do
mes

SELECT DATA_LANCAMENTO + INTERVAL 7 DAY


FROM CD;

No MySQL

SELECT DATE_ADD('2005-12-31
23:59:59', INTERVAL 1 DAY);

Subtrair meses de uma data


SELECT DATA_LANCAMENTO INTERVAL
2 MONTH
FROM CD;

EXTRACT

Extrai e retorna um valor de um campo


do tipo data. possvel extrair apenas o
dia, o ms, o ano, a hora, o minuto ou
o segundo.

Exemplos:

SELECT EXTRACT( MONTH FROM DATE


2002-05-01) FROM DUAL
SELECT EXTRACT( YEAR FROM DATE
2002-05-01) FROM DUAL;
SELECT EXTRACT( DAY FROM DATE
2002-05-01) FROM DUAL;

Tipo SERIAL
Quando definimos
uma
coluna
como sendo do
tipo
serial,
estamos criando
implicitamente
uma seqncia.

CREATE TABLE alunos


(
id serial,
nome varchar(30)
);

Neste caso criado uma seqncia com o nome


alunos_id_seq.
O PostgreSQL cria o nome das seqncias utilizando a seguinte
forma:

nometabela_nomecoluna_seq.
A tabela criada acima tambm poderia ser criada da seguinte
forma, obtendo o mesmo resultado:
CREATE SEQUENCE alunos_id_seq;
CREATE TABLE alunos ( id integer DEFAULT
nextval('alunos_id_seq') NOT NULL );

CAMPO SERIAL
O campo serial na realidade um campo do
tipo integer associado a uma seqncia. Se
acaso for esperado que a seqncia possa
atingir valores maiores que 2.147.483.648
deve-se usar o BIGSERIAL, que na
realidade uma associao do tipo bigint
com uma seqncia. O tipo integer utiliza
quatro bytes para armazenamento de
nmeros enquanto o bigint usa oito bytes.

Abaixo temos um exemplo da


utilizao de seqncias:
BEGIN;

A chave primria da tabela pedido foi


definida como serial, sendo a funo currval
utilizada para preencher a chave estrangeira
na tabela item, antes que a transao seja
finalizada.

INSERT INTO pedido(data)


VALUES (now());
INSERT INTO item (fk_pedido, produto, quantidade, valor)
VALUES (currval('pedido_numero_seq'), 'Camiseta', 2, 25.00);
INSERT INTO item (fk_pedido, produto, quantidade, valor)
VALUES (currval('pedido_numero_seq'), 'Cala', 2, 40.70);
INSERT INTO item (fk_pedido, produto, quantidade, valor)
VALUES (currval('pedido_numero_seq'), 'Meia', 5, 5.90);
INSERT INTO item (fk_pedido, produto, quantidade, valor)
VALUES (currval('pedido_numero_seq'), 'Camisa', 1, 60.00);
COMMIT;

CONSIDERAES FINAIS
Se for passado um valor para os campos do
tipo serial, a seqncia associada ao serial
no incrementada, o que pode criar
problemas de chaves duplicadas. Portanto
no deve-se passar valor para campos seriais,
exceto em situaes especiais em que sabe-se
exatamente o que deseja fazer. Um exemplo
deste tipo de uso em casos de replicao de
dados.

Para saber o valor atual da


independentemente das funes
nextval, use o seguinte comando:

seqncia,
currval e

SELECT * FROM nome_sequencia;


- Quando excluda alguma tabela da base de dados, a
seqncia criada implicitamente com o tipo serial para
esta tabela tambm excluda. Podem gerar
problemas quando uma tabela referencia uma
seqncia criada por outra tabela j excluda.
- No possvel excluir seqncias criadas pelo tipo
serial, a no ser que exclua-se a coluna da tabela que
gerou a seqncia.

Vous aimerez peut-être aussi