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