funções de linha
DESCRIPTION
Funções de Linha. 17/04/06. Funções de Linha. Gerar ou construir novo valor não existente na tabela inicial. Valor construído a partir de dados de uma ou mais células da tabela original. Todas essas células deve pertencer a uma única linha dentro da tabela. Funções de Linha – caso 1. - PowerPoint PPT PresentationTRANSCRIPT
Funções de Linha
17/04/06
Funções de Linha
• Gerar ou construir novo valor não existente na tabela inicial.
• Valor construído a partir de dados de uma ou mais células da tabela original.
• Todas essas células deve pertencer a uma única linha dentro da tabela.
Funções de Linha – caso 1
* Novo valor obtido de colunas assinaladas
Ex. SELECT nome || nome-meio || sobrenome AS NOME
FROM Pessoa WHERE matricula = 73847
Função de Linha – caso 2
Criação da coluna calculada
SELECT n1 + n2 + n3 AS media FROM A
WHERE mat IN ( 3, 4 )
Mat, n1, n2, n3 Mat, n1, n2, n3
A
Media
Funções de Linha - Estrutura das funções de linha
- Funções de manipulação de caracteres - Funções numéricas - Trabalhando com datas - Funções de datas - Aninhando funções - Funções gerais (NVL, nullif, coalesce, etc.) - Função case - Função decode
Estrutura
• SELECT
FUNCAO_LINHA (campo [,campo2,...] ) FROM ....
WHERE ...
• Usar na cláusula SELECT
Funções de datas no postgres
• SELECT CURRENT_TIME;• SELECT CURRENT_DATE;• SELECT CURRENT_TIMESTAMP;• SELECT CURRENT_TIMESTAMP(2);• SELECT LOCALTIMESTAMP;• SELECT timeofday(); • SELECT now();• SELECT TIMESTAMP 'now';
Tempo com meridiano
• SELECT TIMESTAMP 'now' AT TIME ZONE 'BRT'; ( Brasil )
• SELECT TIMESTAMP 'now' AT TIME ZONE 'AKST' ( Alaska )
* Table B.4. Time Zone Abbreviations for Input
Op Example Result
+ date '2001-09-28' + integer '7' date '2001-10-05'
+ date '2001-09-28' + interval '1 hour' timestamp '2001-09-28
01:00'
+ date '2001-09-28' + time '03:00' timestamp '2001-09-28
03:00'
+ interval '1 day' + interval '1 hour' interval '1 day 01:00'
+ timestamp '2001-09-28 01:00' +
interval '23 hours'
timestamp '2001-09-29
00:00'
+ time '01:00' + interval '3 hours' time '04:00'
Funções de Tempo
Op Example Result
- - interval '23 hours' interval '-23:00'
- date '2001-10-01' - date '2001-09-28' integer '3'
- date '2001-10-01' - integer '7' date '2001-09-24'
- date '2001-09-28' - interval '1 hour' timestamp '2001-09-27
23:00'
- time '05:00' - time '03:00' interval '02:00'
- time '05:00' - interval '2 hours' time '03:00'
- timestamp '2001-09-28 23:00' - interval '23
hours'
timestamp '2001-09-28
00:00'
- interval '1 day' - interval '1 hour' interval '23:00'
- timestamp '2001-09-29 03:00' - timestamp
'2001-09-27 12:00' interval '1 day 15:00'
* interval '1 hour' * double precision '3.5' interval '03:30'
/ interval '1 hour' / double precision '1.5' interval '00:40'
Funções de Tempo
• Função OVERLAPS
• Verificar se intervalos de tempo coincidem.• SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS (DATE '2001-10-30', DATE '2002-10-30'); • SELECT (DATE '2001-02-16', INTERVAL '100 days')
OVERLAPS (DATE '2001-10-30', DATE '2002-10-30');
Funções de Tempo
• Extract
• extrair parte de período de tempo
• SELECT EXTRACT ( parametro FROM período)
EXTRACT- parâmetros
Century Século SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
Day Dia SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
Decade Década SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40');
DOW Dia-semana (0-6)
SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
DOY Dia-ano
1-365/366SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
EPOCH Segundos desde 1970
SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08'); SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720 * INTERVAL '1 second'
EXTRACT- parâmetrosHOUR Hora (0-23) SELECT EXTRACT(HOUR FROM TIMESTAMP
'2001-02-16 20:38:40');
Millenium milênio SELECT EXTRACT(millenium FROM TIMESTAMP '2001-02-16 20:38:40');
Milli
Seconds
Mili-segundos SELECT EXTRACT(milliseconds FROM TIMESTAMP '2001-02-16 20:38:40');
Minute Minutos
0-59
SELECT EXTRACT(minute FROM TIMESTAMP '2001-02-16 20:38:40');
SELECT EXTRACT(minute FROM INTERVAL '5 days 3 hours')
Quarter quadrimestre SELECT EXTRACT(quarter FROM TIME '2001-02-16 ');
Second Segundos
0-59SELECT EXTRACT(second FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08'); SELECT EXTRACT(second FROM TIME WITH TIME ZONE ‘20:38:40-08');
Função CASE
• Estrutura análoga a estrutura IF/ELSE de linguagens de programação
• Semelhança com SWITCH-CASE da linguagem C Ansi
Função CASE
SELECT campo1 ,
CASE campo1
WHEN valor1 THEN cmd
WHEN valor2 THEN cmd2
ELSE cmd3
END
FROM tabela1
SELECT vl_total_pedido ,
CASE vl_total_pedido
WHEN 200 THEN 'duzentos reais'
WHEN 800 THEN '800 reais'
ELSE 'outro valor'
END
FROM pedido;
Funções NULLIF
Função COALESCE
Função DECODE
Referências
• Manual do Postgres :
B.2. Date/Time Key Words
• Livro
PATRICK, J. SQL Fundamentos.
Cap. 9, 10 e 11