View
23
Download
0
Category
Preview:
Citation preview
POSITION/INSTR
O objetivo de ambas as funções éretornar a posição do caractere debusca na cadeia de caracteres origem.
Sintaxe POSITION(destino IN origem)
INSTR( origem, destino [, inicio, [fim]])
Tipo DescriçãoDestino Cadeia de caracteres que se quer pesquisar.
Origem Cadeia de caracteres em que será realizada a pesquisa
InícioPosição inicial de busca (se não especificada inicia na posição 1.
FimOcorrência que deve ser pesquisada(se não especificada, indica que é a primeira ocorrência.
Exemplos
Retorna a posição 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 cabeçalho da coluna
INSTR
Mesma função do anterior.
INSTR(origem, destino [, início, [fim]])
Exemplo
SELECT INSTR(‘Renato Russo’, ‘Ru’)
AS BUSCA;
Insere o nome BUSCA no cabeçalho da coluna
Não funciona no PostgreSQL
CHARACTER_LENGTH
Retorna o número de caracteres contidos emuma cadeia de caracteres
SELECT CHARACTER_LENGTH(‘Renato Russo’) AS TAM ;
Insere o nome TAM no cabeçalho da coluna
Concatenando
Para concatenar cadeias de caracteres, utilizando dois pipes (||).
SELECT NOME_GRAVADORA || ‘ – ‘ || ‘CONTATO’ FROM GRAVADORA;
Utilize no MySQL a função CONCAT(PARAMETROS)
Upper
Na realização de buscas é realizada uma comparação com maiúsculas.
Exemplo:
SELECT * FROM AUTOR
WHERE UPPER(NOME_AUTOR) LIKE ‘ROBERTO%’
LOWER
Faz a conversão para minúsculos.
Exemplo:
SELECT * FROM AUTOR
WHERE LOWER(NOME_AUTOR) LIKE‘roberto%’
TRIM
Utilizado para retirar caracteres antes e/oudepois de outra cadeia de caracteres.
Sintaxe:
TRIM [{BOTH | LEADING | TRAILING} car FROM ] cadeia )
Exemplos de utilização
TRIM(‘teste’) ‘teste’
Retira espaços antes e depois
da palavra teste
TRIM(BOTH ‘#’ FROM ’#’ ‘teste’)
‘teste’Retira o símbolo # que estava antes e depois (Both) da cadeia de caracteres.
TRIM(LEADING ’ ‘FROM ‘ teste’
‘teste’Retira o espaço que estava antes da palavra teste.
TRIM(TRAILING ‘ ‘ FROM ‘ teste’
‘teste’Retira o espaço que estava após a palavra
SUBSTRING
Retorna parte de uma cadeia de caracteres.
Sintaxe:
SELECT SUBSTRING( cadeia_origem FROM posição_inicio FOR número_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 caracteresem uma cadeia de caracteres.
TRANSLATE(caracteres, ’pesquisa’,’substituição’)
Exemplo:
SELECT TRANSLATE( UPPER(NOME_AUTOR), ’RT’, ’AB’ )
FROM AUTOR
WHERE CODIGO_AUTOR = 1;
Todas as letras R serãosubstituídas pela letra Ae as letras T pela letra B
Replace
Substitui uma cadeia de caracteres poroutra.
Sintaxe:
SELECT REPLACE( UPPER(NOME_AUTOR),’RT’,’AB’)
FROM AUTOR
WHERE CODIGO_AUTOR =1; Não acontece nada.
Exemplo:
SELECT REPLACE( UPPER(NOME_AUTOR),’RE’,’AB’)
FROM AUTOR
WHERE CODIGO_AUTOR =1;
Mudança do inicio do nome
Manipulação de datas
Tipos de dados relacionados com a data e hora
Tipo Descrição
DATE Apenas Data
Time Apenas Hora
TIMESTAMP Data e Hora
INTERVALIntervalo entre os dois tipos de dados anteriores
Foram definidos algumas funções paradeterminar a data e/ou hora atuais dosistema. Acrescentando CURRENT_antes dos três primeiros tiposanteriores:
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') FROMnome_da_tabela;
Exemplo:
Para saber quais os CDs lançados no dia de hoje:
SELECT * FROM CD
WHERE DATA_LANCAMENTO = CURRENT_DATE;
OPERAÇÕES ARITMÉTICAS COM DATAS
A coluna do tipo data é composta de seis elementos:
YEAR (ano)
MONTH (mês)
DAY (dia)
HOUR(hora)
MINUTE (minuto)
SECOND (segundo)
Operações:
Expressão Resultado
DATETIME-DATETIME INTERVAL
DATETIME INTERVAL DATETIME
INTERVAL INTERVAL INTERVAL
INTERVAL * número INTERVAL
INTERVAL/número INTERVAL
OBS.
Quando usar INTERVAL, especifique em qual tipo de intervalo se quer visualizar a resposta (YEAR, MONTH, DAY, etc) e até indicar o período de tempo (YEAR TO MONTH ou DAY TO SECOND)
Exemplo:
SELECT CURRENT_DATE, DATA_LANCAMENTO,
CURRENT_DATE – DATA_LANCAMENTO ASDIFERENCA
FROM CD;
Encontrar o intervalo de dias entre duas datas
Adicionar dias em uma data
SELECT DATA_LANCAMENTO + 7
FROM CD;
SELECT DATA_LANCAMENTO + INTERVAL ‘7’ DAY
FROM CD;
Somente sefor dentro domes
EXTRACT
Extrai e retorna um valor de um campo do tipo data. É possível extrair apenas o dia, o mês, 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 definimosuma colunacomo sendo dotipo serial,estamos criandoimplicitamenteuma seqüência.
CREATE TABLE alunos (
id serial,nome varchar(30)
);
Neste caso é criado uma seqüência com o nome alunos_id_seq. O PostgreSQL cria o nome das seqüências utilizando a seguinte forma:
nometabela_nomecoluna_seq.
A tabela criada acima também 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 dotipo integer associado a uma seqüência. Seacaso for esperado que a seqüência possaatingir valores maiores que 2.147.483.648deve-se usar o BIGSERIAL, que narealidade é uma associação do tipo bigintcom uma seqüência. O tipo integer utilizaquatro bytes para armazenamento denúmeros enquanto o bigint usa oito bytes.
Abaixo temos um exemplo da utilização de seqüências:
BEGIN;
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'), 'Calça', 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;
A chave primária da tabela pedido foidefinida como serial, sendo a função currvalutilizada para preencher a chave estrangeirana tabela item, antes que a transação sejafinalizada.
CONSIDERAÇÕES FINAIS
Se for passado um valor para os campos dotipo serial, a seqüência associada ao serialnão é incrementada, o que pode criarproblemas de chaves duplicadas. Portantonão deve-se passar valor para campos seriais,exceto em situações especiais em que sabe-seexatamente o que deseja fazer. Um exemplodeste tipo de uso é em casos de replicação dedados.
Para saber o valor atual da seqüência,independentemente das funções currval enextval, use o seguinte comando:
SELECT * FROM nome_sequencia;- Quando é excluída alguma tabela da base de dados, a
seqüência criada implicitamente com o tipo serial para esta tabela também é excluída. Podem gerar problemas quando uma tabela referencia uma seqüência criada por outra tabela já excluída.
- Não é possível excluir seqüências criadas pelo tipo serial, a não ser que exclua-se a coluna da tabela que gerou a seqüência.
Recommended