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)
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 |