Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Podría Null ser igual a 0 ? (https://www.clubdelphi.com/foros/showthread.php?t=43063)

Roilo 30-04-2007 22:46:03

Podría Null ser igual a 0 ?
 
Un abraso al Foro:
Echenle un vistazo a esta consulta :

Código SQL [-]
....
UPDATE Datos SET
total = (SELECT uno FROM tabla1 WHERE a=1)+(SELECT dos FROM tabla2 WHERE a=1)

Resulta que cuando no se cumple alguna de las subconsultas el resultado es nulo. Me guataría que si la primera subconsulta no devuelve resultado que lo tome como cero, para así sumar nulo+3 y el resultado de la consulta sea 3.
Qué me sugieren....
Gracias de antemanos.

delphi.com.ar 30-04-2007 22:48:59

En ese caso es importante saber que motor estas usando, porque podrías utilizar funciones como NVL (Oracle), IsNull (SqlServer), NZ (Access)... para definir un valor por defecto en el caso de que un valor sea NULL.

Saludos!

Roilo 30-04-2007 23:37:38

ok
 
Uso sql Server ...

ContraVeneno 30-04-2007 23:39:30

Entonces como ya dijo federico, la función isnull() es la que debes usar.

Roilo 30-04-2007 23:48:28

:(
 
De paso podrías arreglar mi código de ejemplo...
Disculpame la molestia, es que no estoy tan claro.

egostar 30-04-2007 23:56:29

No se si asi está bien pero si estoy mal por favor corrijanme, tengo duda si es sobre la consulta completa o por el valor del select.

Código SQL [-]
UPDATE Datos SET
total = ISNULL( (SELECT uno FROM tabla1 WHERE a=1), 0)+ ISNULL( (SELECT dos FROM tabla2 WHERE a=1),0)

o así

Código SQL [-]
 
UPDATE Datos SET
total = (SELECT ISNULL(uno,0) FROM tabla1 WHERE a=1) + (SELECT ISNULL(dos,0) FROM tabla2 WHERE a=1)

Salud OS.

ContraVeneno 01-05-2007 00:01:38

Cita:

Empezado por egostar
No se si asi está bien pero si estoy mal por favor corrijanme

De hecho, las dos formas son correctas.


Cita:

Empezado por Roilo
De paso podrías arreglar mi código de ejemplo...

Y bueno, eso de arreglarte el código, era tan fácil como presionar F1 y buscar en la ayuda la función isnull y esta ayuda te daría todas las herramientas necesarias para que TU mismo hubieras solucionado tu problema.

Saludos.

delphi.com.ar 01-05-2007 00:34:58

Cita:

Empezado por ContraVeneno
De hecho, las dos formas son correctas...

Ojo que no son iguales!... Si una de las subconsultas no retornan registros, y el ISNULL esta "dentro" de la subconsulta como en el segundo ejemplo, el resultado será NULL. En cambio si el ISNULL abarca toda la subconsulta el valor será "0" o el valor del parámetro pasado.
Roilo tambien es importante que tengas en cuenta, que si algunas de las subconsultas retornan mas de un registro, la instrucción fallará.

Saludos!


La franja horaria es GMT +2. Ahora son las 06:51:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi