FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
si usas SQL Server puedes usar ISNULL
select ISNULL( campo, 0) FROM Tabla |
#3
|
|||
|
|||
y para FireBird 1.5?
Lo que quiero es: un valor "0" volverlo null |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
proba con algo asi:
Código:
CREATE PROCEDURE Cero2Null (VALOR INTEGER) RETURNS (VALOR INTEGER) AS BEGIN IF (VALOR = 0) THEN VALOR = NULL; END^ Eso si, tambien es mas lento.
__________________
[Crandel] |
#7
|
|||
|
|||
Has mirado las nuevas funciones del Estandar SQL NullIf, Case, Coalesce? mira los Release Notes y lo entenderas..
|
#8
|
|||
|
|||
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. 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"; 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) |
#9
|
||||
|
||||
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:
Última edición por jjorell fecha: 14-07-2006 a las 18:08:56. |
|
|
|