Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2005
ELINK ELINK is offline
Miembro
 
Registrado: mar 2005
Posts: 55
Poder: 20
ELINK Va por buen camino
if "0" then null, como?

Debo de aceptar que soy un novato en esto del SQL y debido ha eso biene mi pregunta:
como puedo hacer para que en una consulta sql en vez de "0" aparesca null( o sea cambiado por null)

original:
codi_prod seri1 seri2 seri3 seri4 total
coecmsm 0 1 0 0 1

ideal:
codi_prod seri1 seri2 seri3 seri4 total
coecmsm 1 1

(no es necesario que sume)

Última edición por ELINK fecha: 08-04-2005 a las 16:44:41.
Responder Con Cita
  #2  
Antiguo 08-04-2005
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
si usas SQL Server puedes usar ISNULL

select ISNULL( campo, 0) FROM Tabla
Responder Con Cita
  #3  
Antiguo 08-04-2005
ELINK ELINK is offline
Miembro
 
Registrado: mar 2005
Posts: 55
Poder: 20
ELINK Va por buen camino
y para FireBird 1.5?

Lo que quiero es: un valor "0" volverlo null
Responder Con Cita
  #4  
Antiguo 09-04-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Puedes crear una funcion que te convierta los 0 a NULL, haces una libreria con ella y la pones en las UDF del firebird y despues haces la cunsulta usando esa función.

Algo asín :

SELECT Cero2Null(seri1) AS seri1, Cero2Null(seri2) AS seri2 FROM Tabla_Seri WHERE...

va de maravilla, yo lo uso (con otra función claro está) y es la caña.

Saludos

Última edición por fly fecha: 09-04-2005 a las 06:26:43.
Responder Con Cita
  #5  
Antiguo 09-04-2005
ELINK ELINK is offline
Miembro
 
Registrado: mar 2005
Posts: 55
Poder: 20
ELINK Va por buen camino
mmm....

"Siento" que lo dices es correcto
Pero la verdad es que no se como realizar todo lo que me escribiste; exactamente desde el comienzo hasta "Algo asín :" luego para adelante no tengo problema, luego me puse a revisar la udf de firebird pero no entendi ni un poquito
Realmente te agradesería si me ayudaras a crear esa funcion
Responder Con Cita
  #6  
Antiguo 09-04-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
proba con algo asi:

Código:
CREATE PROCEDURE Cero2Null (VALOR INTEGER) RETURNS (VALOR INTEGER)
AS 
BEGIN
  IF (VALOR = 0) THEN VALOR = NULL;
END^
no es UDF, nunca cree uno, pero creo que te deberia funcionar igual con procedimiento.
Eso si, tambien es mas lento.
__________________
[Crandel]
Responder Con Cita
  #7  
Antiguo 09-04-2005
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Has mirado las nuevas funciones del Estandar SQL NullIf, Case, Coalesce? mira los Release Notes y lo entenderas..
Responder Con Cita
  #8  
Antiguo 11-04-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Un gallifante para Delfino eso nos pasa por no leer... muy bien maestro...

Aunque ya no viene al caso te cuento lo de las UDF.

Es algo parecido a lo que dice Crandel pero más cómodo para ser usado en todas las aplicaciones:

1º.- Creas una libreria en delphi (en este caso intbase_star.dll)

Código:
library intbase_star;
 
{Esta libreria ha sido pensada para el trabajo con Interbase
para cubrir las carencias de funciones no implementadas directamente
en el motor de base de datos Interbase de Borland
 
las funciones deben crearse con paso de parametros cdecl
los parametros word o integer deben pasarse por referencia y los devuelve por valor
los parametros de tipo string dben pasarse por valor y se devuelven por valor
En interbase el tipo string debe ser pasado a Pchar con Cstring y en
las funciones de la DLL deben ser tratados como Pchar
}
 
uses
SysUtils,
Classes;
var buffer:  Pchar;
 
 
function redondeo(var dato:double;var digitos:integer):double; cdecl;
var dato_tratado:double;
	aux,contador:integer;
Begin
aux:=1;
for contador:=1 to digitos do aux:=aux*10;
dato_tratado:=dato;
dato_tratado:=dato_tratado*aux;
dato_tratado:=round(dato_tratado);
dato_tratado:=dato_tratado/aux;
redondeo:=dato_tratado
end;
 
 
function codext(txt: string; var dato: integer; var year:integer;var longdato:integer):Pchar;cdecl;
var cadena_S:string;
	contador:integer;
	Cadena_P:pchar;
	periodo : string;
	letra : char;
Begin
periodo:=IntToStr(year);
delete(periodo,1,2);
letra:=txt[1];
Cadena_P:=buffer;
Cadena_S:=inttostr(dato);
for contador:=length(Cadena_S) to longdato-1 do Cadena_S:='0'+Cadena_S;
Cadena_S:=UPPERCASE(letra)+'/'+periodo+Cadena_S;
strpcopy(Cadena_P,Cadena_S);
result:=cadena_P;
end;
 
exports
redondeo;
exports
codext;
begin
buffer:=stralloc(50);
end.
2º.- Pones la DLL creada en la carpera UDF del firebird/Interbase

3.- En el SQL de creación de la DB añades al principio:
Código:
DECLARE EXTERNAL FUNCTION codext
CSTRING(1),INTEGER, INTEGER,INTEGER
RETURNS CSTRING(10) 
ENTRY_POINT "codext"
MODULE_NAME "INTBASE_star.DLL";
4.- Y ya está listo, puedes usar la función desde los triggers o desde delphi sin problemas.

Espero que este ejemplo te sirva para entenderlo, a mi me lo pasaron tal cual e hice las modificaciones necesarias para mi prog. (Fon gracias por el codigo)
Responder Con Cita
  #9  
Antiguo 14-07-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
Wink

Hola! la verdad no se mucho de FireBird, pero si algo sobre SQL Server y tambien pudiste hacerlo en una sola consulta utilizarando un CASE (si FireBird 1.5 lo soporta, que pensaría que si) , es decir algo asi:

Código SQL [-]
SELECT CASE seri1 WHEN 0 THEN NULL ELSE seri1 END AS seri1, 
       CASE seri2 WHEN 0 THEN NULL ELSE seri1 END AS seri2 
FROM Tabla_Seri WHERE ...

Última edición por jjorell fecha: 14-07-2006 a las 18:08:56.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:56:25.


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
Copyright 1996-2007 Club Delphi