Realmente Dickson, nesses termos é complicado para o interpretador, embora não impossível. Ainda bem que não é algo crítico e há alternativas bem viáveis. A idéia do tópico era só discutir a possibilidade mesmo.
Obrigado a todos pelas dicas. Em 28 de novembro de 2012 15:52, Dickson S. Guedes <[email protected]>escreveu: > Em 28 de novembro de 2012 15:40, Anselmo Silva <[email protected]> > escreveu: > >> >> > gostaria de um retorno boolean para > >> >> > > >> >> > SELECT A=B=C=D=E=F=G=H.... é possível numa só declaração SQL sem > sem > >> >> > saber o > >> >> > numero de elementos? > >> >> > > >> >> Seja mais específico... Qual o tipo dos elementos? Quem fornecerá > esses > >> >> elementos? Você montará esta consulta dinamicamente em uma linguagem > de > >> >> programação? > >> >> > >> >> world=# SELECT (1 = 2) and (1 <> 3); > >> >> ?column? > >> >> ────────── > >> >> f > >> >> (1 registro) > >> >> > >> > > >> > Os elementos são NUMERIC, os elementos são campos de uma tabela e a > >> > consulta > >> > não é dinâmica. Quero saber se são todos iguais então teorizei o > select > >> > acima citado. > >> > Eu posso usar sua abordagem, apenas teorizei se era possível outra > >> > abordagem > >> > apenas com operadores '=', já que é 'humanamente' lógico pois qualque > >> > elemento diferente retornaria Falso. > >> > >> > >> AFAICS, não faz parte da linguagem SQL esta sintaxe, entretanto o > >> operador '=' recebe dois parametros > >> o 'esquerda' e o 'direita', e o PostgreSQL converte isto para algo > >> como pg_catalog.equal(direita, esquerda) > >> o que acaba impossibilitando esta sintaxe também para o operador '=' > >> > >> Mas voce pode fazer de outra maneira... > >> > >> postgres=# select a = ALL(ARRAY[a,b,c]) from (SELECT 1 as a, 2 as b, > >> 3 as c, 1) as x; > >> ?column? > >> ---------- > >> f > >> (1 row) > >> > >> > >> postgres=# select a = ALL(ARRAY[a,b,c]) from (SELECT 1 as a, 1 as b, > >> 1 as c, 1) as x; > >> ?column? > >> ---------- > >> t > >> (1 row) > >> > > > > A função all realmente resolve e bem é limpa. apenas comentando a > resposta > > do Dickson: > > > > Acha que seria algo interessante a se implementar? Visto que, como posso > > fazer SELECT A+B+C+D+ETC... > > seria um Ctrl+C e Ctrl+V no operador de soma (grosseiramente falando > hehe). > > Você pode fazer operadores especiais, veja que ao fazer > > select 1=2=3; > ERROR: operator does not exist: integer = boolean > LINE 1: select 1=2=3; > > O erro que dá é porque a saída de uma expressão, que no caso é > booleana, é passada para a entrada da outra expressão, e neste caso > não tem como comparar um boolean de uma expressão (1=2 que retorna > false) com o inteiro da outra ( false = 3 por exemplo). Já no caso do > + isto funciona porque as somas podem ser concatenadas. > > No caso da soma ficaria > > select 1+2+3; > > é expandido para algo como (o nome 'plus' é hipotético): > > SELECT plus(plus(1,2),3) > > Já este: > > SELECT 1+2+3; > > seria expandido para algo como (o nome 'plus' é hipotético): > > SELECT equal(equal(1,2), 3); > > porém equal(x, y) retorna boolean, mas x e y precisam ser integer. > > Você pode criar um operador que espera (boolean, integer) mas isto não > resolveria o seu caso. Talvez um tipo composto. > > Basicamente seria isto. > > []s > -- > Dickson S. Guedes > mail/xmpp: [email protected] - skype: guediz > http://guedesoft.net - http://www.postgresql.org.br > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Anselmo M. Silva
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
