Pessoal,

Já que querem usar a cláusula CASE (a qual repudio veementemente), por que
não usam-na de outra forma [1], que onera um pouco menos o SGBD? É o análogo
de se trocar um IF-ELSEIF-...-ELSEIF por um SWITCH CASE. Além disso, usar as
funções extract() ou date_part() para retornar o dia da semana [2] é bem
mais elegante e seguro do que usar uma função de formatação/transformação
como o to_char().

A consulta poderia ficar assim:

SELECT
 CASE extract(dow from now())
   WHEN 0 THEN 'domingo'
   WHEN 1 THEN 'segunda'
   -- ...
   WHEN 6 THEN 'sábado'
   ELSE 'erro'
 END;

Mas, para simplificar e deixar mais limpo o código, usaria a forma a seguir:

SELECT
('{domingo,segunda,terça,quarta,quinta,sexta,sábado}'::text[])[extract(dow
from now()) + 1];

[1] http://www.postgresql.org/docs/current/static/functions-conditional.html
[2] http://www.postgresql.org/docs/8.2/interactive/functions-datetime.html

--
Atenciosamente,

Rodrigo Hjort
Icewall Tecnologias
http://www.icewall.com.br


2007/3/16, Adriano Espinoza de Oliveira <[EMAIL PROTECTED]>:

Uso a função abaixo, bem parecida com o que a Milena sugeriu:

CREATE OR REPLACE FUNCTION "public"."dia_da_semana" (integer) RETURNS
varchar AS
$body$
begin
  return
    case
      when $1 = 0 then 'domingo'
      when $1 = 1 then 'segunda'
      when $1 = 2 then 'terça'
      when $1 = 3 then 'quarta'
      when $1 = 4 then 'quinta'
      when $1 = 5 then 'sexta'
      when $1 = 6 then 'sábado'
      else 'ERRO'
    end;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;



Em 16/03/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> escreveu:
>
>      Milena...
>     Vai aí uma dica...
>
> SELECT CASE WHEN TO_CHAR(CURRENT_DATE, 'D') = 1 THEN 'DOMINGO'
>             WHEN TO_CHAR(CURRENT_DATE, 'D') = 2 THEN 'SEGUNDA'
>             WHEN TO_CHAR(CURRENT_DATE, 'D') = 3 THEN 'TERCA'
>             WHEN TO_CHAR(CURRENT_DATE, 'D') = 4 THEN 'QUARTA'
>             WHEN TO_CHAR(CURRENT_DATE, 'D') = 5 THEN 'QUINTA'
>             WHEN TO_CHAR(CURRENT_DATE, 'D') = 6 THEN 'SEXTA'
>             WHEN TO_CHAR(CURRENT_DATE, 'D') = 7 THEN 'SABADO'
>        END AS DIA_DA_SEMANA;
>
>
>    --
>
> *Sidnei Samuel Klein *
>

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a