Re: Ayuda con update

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pablo <pabloste(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda con update
Date: 2007-11-26 14:11:54
Message-ID: 20071126141154.GN6248@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

pablo escribió:

> El problema es que en una tabla tengo 2 datos (dato1, dato2) como texto
> guardados.
> quiero validar que dato1 sea: numero, no nulo, mayor que cero.
>
> update tabla set dato2 = ' - Error dato1' where is_number(dato1) = 'F' or
> dato1 is null or dato1 < 0
> también probé con esta:
> update tabla set dato2 = ' - Error dato1' where is_number(dato1) = 'F' or
> dato1 is null or to_number(dato1 < 0)
>
> nota: is_number es una función que entrega T si es numero y F si no lo es
> (funciona super bien)
>
> el problema es que en el caso que dato1 sea número funciona super bien. En
> caso que dato1 tenga un caracter la consulta se cae en la condición "dato1 <
> 0".

El problema es que no hay promesa de "corto circuito" de condiciones en
el WHERE. O sea aun cuando una condicion con AND falle, las siguientes
pueden ser evaluadas (o no).

Donde si ocurre corto circuito es con CASE. Prueba usando CASE para
verificar las condiciones.

--
Alvaro Herrera Valdivia, Chile ICBM: S 39º 49' 18.1", W 73º 13' 56.4"
"Investigación es lo que hago cuando no sé lo que estoy haciendo"
(Wernher von Braun)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-11-26 15:26:44 Re: Conversión de LATIN1 a UTF8
Previous Message pablo 2007-11-26 13:58:28 Ayuda con update