Em 08/10/06, Arthur Molina<[EMAIL PROTECTED]> escreveu: > Amigos, > > Estou passando por um problema que nao consigo resolver. Possuo varias > tabelas. Algumas com campo varchar outras int ou numeric. E em algumas, > apesar de estar setada como varchar ela possui dados tanto numericos > quanto com palavras ou entao nulos. O fato eh o seguinte, o usuario tem > a possibilidade de criar uma formula matematica envolvendo varias > tabelas, mas a string da erro em algumas vezes justamente por causa > dessa possibilidade de ter dados tambem alfanumericos. > > Um exemplo de string eh esse abaixo: > > SELECT tab01.V01 + tab02.V04 AS vx, a_bjaguaribe_mu.codigo AS id, > a_bjaguaribe_mu.first_nome AS legenda > FROM tab01, tab02, a_bjaguaribe_mu > WHERE a_bjaguaribe_mu.codigo=tab01.codigo AND > a_bjaguaribe_mu.codigo=tab02.codigo > > > O que eu quero fazer eh que das duas uma: > - ou antes de fazer a soma, ele teste para checar se as variaveis sao > numericas e se nao forem retorne nulo; > - ou que ele faca a soma e caso ela de erro retorne nulo, caso > contrario retorne o valor da soma. > > Quero que aconteca isso pq os outros valores da tabela que nao forem > texto ou nulos devem passa pela formula e mostrar o resultado. > Nao sei se me fiz entender, mas eh isso. Ateh imaginei que poderia ser > feito assim, baseado em dicas dos colegas que me enviaram: > > SELECT CASE WHEN funcaoteste(tab01.V01 + tab02.V04)=1 THEN tab01.V01 + > tab02.V04 ELSE null AS vx, a_bjaguaribe_mu.codigo AS id, > a_bjaguaribe_mu.first_nome AS legenda > FROM tab01, tab02, a_bjaguaribe_mu > WHERE a_bjaguaribe_mu.codigo=tab01.codigo AND > a_bjaguaribe_mu.codigo=tab02.codigo > > Onde funcaoteste retornaria 1 caso a soma desse certo e qualquer outra > coisa caso contrario. >
nao sei se alguem tem alguma ideia melhor, no momemtno nao me vem outra coisa a cabeca a nao ser uma funcaozinha com tratamento de excecao, onde tenta fazerum cast do valor se der erro retorna null ai fica mais facil o select inclusive pq quando vc chamar a funcao vc passa o campo e ela retorna o valor inteiro para vc usar na soma ou retorna 0 por exemplo assim ficaria assim veja select get_value(v1) + get_value(v2) from test; na get_value eh so sar tratamento de escessao para tentar fazer isso: return cast($1 as integer); se der erro return 0; assim se v1 for 1 e v2 for 4 o resultado eh 5 se v1 for 1 e v2 for 'coutinho' o resultado eh 1; > Obrigado, > artz > > > _______________________________________________________ > Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. > Registre seu aparelho agora! > http://br.mobile.yahoo.com/mailalertas/ > > > _______________________________________________ > 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 > -- Nabucodonosor Coutinho Database Administrator Accu Hosting - www.accuhosting.com _______________________________________________ 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
