Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   create procedure que retorne solo numeros (https://www.clubdelphi.com/foros/showthread.php?t=96678)

Carmelo Cash 19-04-2024 00:19:36

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 ;^

Carmelo Cash 19-04-2024 04:13:38

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 ;^

Carmelo Cash 19-04-2024 04:14:16

Sigo con error code -104

fjcg02 19-04-2024 09:35:12

REPLACE (str, find, repl)

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

Pruebas y nos dices...

Saludos

Carmelo Cash 19-04-2024 14:43:58

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.

ElKurgan 24-04-2024 15:08:35

Gracias por compartir la solución

Saludos


La franja horaria es GMT +2. Ahora son las 04:29:06.

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