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 19-04-2024
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 22
Carmelo Cash Va por buen camino
create procedure que retorne solo numeros

Buenos días foro:

Estoy usando Firebird 2.5 y la base dice SQL Dialecto 1

Tengo un campo string que tiene este dato '20-12456789-0' y necesito que al consultar regrese '2012456890'.

Necesito tenerlo desde la consulta, sin arreglarlo desde Delphi.

Estuve mirando la posibilidad de hacer un procedimiento almacenado, pero aún no tuve éxito.

la verdad es que no puedo crearlo. Si lo ejecuto así, me dice "Token unknow line 1 column 5"

Si le saco la primer línea, me dice "Unespeted en of command line 3 column 11" , y así llevo horas renegando.

Bueno, desde ya agradezco cualquier sugerencia que me ayude a resolver este tema.

(este procedimiento que copio abajo, lo saqué de internet y le hice algunas modificaciones)


saludos.


Código SQL [-]
SET TERM ^;
Create Procedure SoloNumeros (num string) returns (Numero String) as
declare i integer;
declare res string;
begin
  res='';
  i=1;
  while (i<=char_length(:num)) do begin
    if ((substring(:num from i for 1) > ascii_char(29) ) and (substring(:num from i for 1)then begin
      res =res||substring(:num from i for 1);
    end 
    i=i+1;
  end
  result=res;
  suspend;
end ^
SET TERM ;^
Responder Con Cita
  #2  
Antiguo 19-04-2024
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 22
Carmelo Cash Va por buen camino
Correccion del codigo anterior

Código SQL [-]
SET TERM ^;
Create Procedure SoloNumeros (num varchar(30)) returns (Numero varchar(30)) as
declare i integer;
declare res varchar(30);
begin
  res='';
  i=1;
  while (i<=char_length(:num)) do begin
    if ((substring(:num from i for 1) > ascii_char(29) ) and (substring(:num from i for 1)< ascii_char(40))) then begin
      res =res||substring(:num from i for 1);
    end 
    i=i+1;
  end
  result=res;
  suspend;
end ^
SET TERM ;^
Responder Con Cita
  #3  
Antiguo 19-04-2024
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 22
Carmelo Cash Va por buen camino
Sigo con error code -104
Responder Con Cita
  #4  
Antiguo 19-04-2024
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.412
Poder: 22
fjcg02 Va camino a la fama
REPLACE (str, find, repl)

https://www.firebirdsql.org/refdocs/...c-replace.html

Pruebas y nos dices...

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 19-04-2024
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 22
Carmelo Cash Va por buen camino
Resuelto

Buen día:

Al final el problema era que estaba usando un TQuery para crear el procedure, lo reemplacé por un TIBSQL y listo.

quedó así:

Código SQL [-]
Create Procedure SoloNumerosx (num varchar(30)) returns (Numero varchar(30)) as
declare i integer;
declare res varchar(30);
begin
  res='';
  i=1;
  while (i<=char_length(:num)) do begin
    if ((substring(:num from i for 1) > ascii_char(47) ) and (substring(:num from i for 1)< ascii_char(58))) then begin
      res =res||substring(:num from i for 1);
    end 
    i=i+1;
  end
  numero=res;
  suspend;
end;

Código SQL [-]
select ndoc2,
(select numero from SOLONUMEROSX (ndoc2))  as cuit,
cliente
from clientes

Sin embargo voy a utilizar la solución propuesta por [fjcg02], pero esta solución me sirve porque se trata de sacar solo guiones, que es distinto a dejar solo números.

Gracias por todo.
Responder Con Cita
  #6  
Antiguo 24-04-2024
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.237
Poder: 20
ElKurgan Va camino a la fama
Thumbs up

Gracias por compartir la solución

Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en CREATE PROCEDURE desde aplicación Angel.Matilla Firebird e Interbase 14 16-11-2015 11:35:09
Aportación del código de un stored procedure para conversión literal de números birmain Firebird e Interbase 12 16-07-2015 20:12:29
Edits solo acepte numeros y , . JXJ Varios 5 02-03-2011 03:54:21
CREATE PROCEDURE en Access ...? Ledian_Fdez SQL 1 09-12-2009 11:22:54
Convertir Rut sólo en números joi Varios 13 24-10-2005 18:25:01


La franja horaria es GMT +2. Ahora son las 01:03:35.


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