Sidnei Vladisauskis escreveu:
> Fala pessoal,
> Semana passada estive perguntando como fazer um select para os usuários que
> fazem aniversário no dia corrente.
> 
> Nosso amigo Adriano mandou o link
> http://pgdocptbr.sourceforge.net/pg80/functions-datetime.html#FUNCTIONS-DATE
> TIME-EXTRACT
> No qual li e reli, aprendi coisas importantes sobre data.
> 
> Mas to perdido em fazer um select dentro de uma VIEW que me retorna só os
> usuários que fazem aniversário aquele dia.
> 
> Eu tentei o seguinte:
> SELECT usu_id, usu_nascimento FROM usuarios WHERE date_part('month',
> TIMESTAMP usu_nascimento) = date_part('month', CURRENT_DATE) and
> date_part('day', TIMESTAMP usu_nascimento) = date_part('day', CURRENT_DATE);
> 
> E
> 
> SELECT usu_id, usu_nascimento FROM usuarios WHERE extract(MONTH FROM
> TIMESTAMP usu_nascimento) = extract(MONTH FROM CURRENT_DATE) and
> extract(MONTH FROM TIMESTAMP usu_nascimento) = extract(MONTH FROM
> CURRENT_DATE);
> 
> Mas ele da o erro:
> ERROR: syntax error at or near "usu_nascimento"
> SQL state: 42601
> Character: 80
> 
> Que seria nessa parte:
> date_part('month', TIMESTAMP usu_nascimento)
> 
> Testei colocando o timestamp na mão ('1972-04-10' e '2007-04-10' nos
> respectivos campos) e me retornou.
> 
> A pergunta pode ser meio newbe, mas confesso que to perdidão
> :o)
> 


Complementando:
O problema nas sentenças acima está no cast. Você pode utilizar:
CAST( usu_nascimento AS TIMESTAMP) ou
usu_nascimento::TIMESTAMP

A expressão "TIMESTAMP usu_nascimento" é inválida. Você só pode utilizar 
esta forma com strings, por ex.: TIMESTAMP '2007-04-10'.

Veja:
item 4.2.8. Type Casts em:
http://www.postgresql.org/docs/8.2/interactive/sql-expressions.html#SQL-SYNTAX-TYPE-CASTS
e
item 4.1.2.5. Constants of Other Types em:
http://www.postgresql.org/docs/8.2/interactive/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS
"The ::, CAST(), and function-call syntaxes can also be used to specify 
run-time type conversions of arbitrary expressions, as discussed in 
Section 4.2.8. But the form type 'string' can only be used to specify 
the type of a literal constant."

[]s
Osvaldo
_______________________________________________
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