Funções de Linha

20
Funções de Linha 17/04/06

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 Presentation

Transcript of Funções de Linha

Page 1: Funções de Linha

Funções de Linha

17/04/06

Page 2: Funções de Linha

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.

Page 3: Funções de Linha

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

Page 4: Funções de Linha

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

Page 5: Funções de Linha

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 

Page 6: Funções de Linha

Estrutura

• SELECT

FUNCAO_LINHA (campo [,campo2,...] ) FROM ....

WHERE ...

• Usar na cláusula SELECT

Page 7: Funções de Linha

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';

Page 8: Funções de Linha

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

Page 9: Funções de Linha

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

Page 10: Funções de Linha

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'

Page 11: Funções de Linha

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');

Page 12: Funções de Linha

Funções de Tempo

• Extract

• extrair parte de período de tempo

• SELECT EXTRACT ( parametro FROM período)

Page 13: Funções de Linha

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'

Page 14: Funções de Linha

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');

Page 15: Funções de Linha

Função CASE

• Estrutura análoga a estrutura IF/ELSE de linguagens de programação

• Semelhança com SWITCH-CASE da linguagem C Ansi

Page 16: Funções de Linha

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;

Page 17: Funções de Linha

Funções NULLIF

Page 18: Funções de Linha

Função COALESCE

Page 19: Funções de Linha

Função DECODE

Page 20: Funções de Linha

Referências

• Manual do Postgres :

B.2. Date/Time Key Words

• Livro

PATRICK, J. SQL Fundamentos.

Cap. 9, 10 e 11