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
Mat, n1, n2, n3
Mat, n1, n2, n3 Media
A
SELECT n1 + n2 + n3 AS media FROM A
WHERE mat IN ( 3, 4 )
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
Funções de Tempo
Op
+
+
Example
date '2001-09-28' + integer '7'
date '2001-09-28' + interval '1 hour'
Result
date '2001-10-05'
timestamp '2001-09-28
01:00'
timestamp '2001-09-28
+
date '2001-09-28' + time '03:00'
+
interval '1 day' + interval '1 hour'
interval '1 day 01:00'
timestamp '2001-09-28 01:00' +
timestamp '2001-09-29
interval '23 hours'
00:00'
time '01:00' + interval '3 hours'
time '04:00'
+
+
03:00'
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'
timestamp '2001-09-27
-
date '2001-09-28' - interval '1 hour'
-
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
timestamp '2001-09-28
hours'
00:00'
interval '1 day' - interval '1 hour'
interval '23:00'
-
timestamp '2001-09-29 03:00' - timestamp
'2001-09-27 12:00'
23: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/366
SELECT 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âmetros
HOUR
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 '200102-16 ');
Second
Segundos
0-59
SELECT 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
Download

funções de linha (data)