Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Como pasar de string a integer. (https://www.clubdelphi.com/foros/showthread.php?t=41559)

mcalmanovici 19-03-2007 17:25:32

Como pasar de string a integer.
 
Hola gente:
tengo el siguiente problema. Tengo un campo de una tabla que es varchar(30). El mismo tiene letras y números (un ejemplo de este dato sería 'OT21145'). Yo necesito una vez que ya tengo este dato poder quedarme solo con la parte entera del mismo (O sea que quisiera quedarme con el 21145) para poder insertarla en otra tabla. Todo esto lo quiero hacer desde un store procedure desde la base.
Estoy trabajando con el motor de base de datos firebird 1.5.

Desde ya agradezco si alguien sabría contestarme.
Gracias por su tiempo.
Mariano.

xavinet 19-03-2007 17:39:51

SUBSTR de las UDF's
 
Hola!

Creo que la función substr de las udf's del firebird, te sirve para coger esta parte entera que dices en un procedure.

Suerte!

Alejandro73 19-03-2007 19:40:43

Prueba con este codigo
 
Hola yo utilizo la siguiente funcion

Declaracion
Function QuitarLetras(cadena: String):String;

Detalle de la Funcion
Function QuitarLetras(cadena: string): string;
var
i: integer;
begin
for i := 1 to Length(cadena) do
if cadena[i] in ['0'..'9'] then
Result := Result + cadena[i];
end;

Llamada
QuitarLetras(ubicciondelstring)

Esto te dejara solo los numeros, pero como string, tienes luego que utilizar la instruccion para pasar de strin a integer.

Espero te sirva.

Saludos

Alejandro
Valparaiso - CHILE

RONPABLO 19-03-2007 20:15:34

Código SQL [-]
SET TERM ^^ ;
CREATE PROCEDURE P_MAX_CON_LETRAS returns (
  FACTURA VarChar(30),
  NUMERO Integer)
AS
DECLARE VARIABLE c char(1);
DECLARE VARIABLE cadena varchar(30);
DECLARE VARIABLE cadena1 varchar(30);
DECLARE VARIABLE CIFRAS1 integer;
DECLARE VARIABLE i integer;
DECLARE VARIABLE j integer;
DECLARE VARIABLE  AUMENTAR Integer;
DECLARE VARIABLE  CIFRAS Integer;
DECLARE VARIABLE  LETRA VarChar(4);
begin
  /* code */
  for select AUMENTAR, CIFRAS, LETRA from T_CIFRAS
  into :AUMENTAR, :CIFRAS, :LETRA do
  begin
  if (aumentar is null) then
    aumentar = 0;
  if (CIFRAS is null) then
    CIFRAS = 1;
  for select FACTURA from T_DEFINICION_TRATAMIENTO where FACTURA is not null into
  :FACTURA
  do
  begin
     CIFRAS1= CIFRAS;
     cadena = '0';
     numero=0;
     j=1;
     i = strlen(:FACTURA);
     while(j<=i) do
        begin
          c = substr(FACTURA,j,j);
          if (c between '0' and '9') then
             begin
                cadena = cadena || cast(:c as integer);
             end
          else
             cadena1 = substr(FACTURA,1,j);
          j=j+1;
        end
     numero = cast(cadena as integer) + aumentar;
     IF ((CIFRAS1 < i) and (CIFRAS < 2)) then
        CIFRAS1 = i;
     if ((letra is not null) and (letra <> '') and (letra <> ' ') and (letra <> '    ')) then
        cadena1 = letra;
     FACTURA = cadena1 || lpad(cast(numero as varchar(30)),cifras1,'0');
     suspend;
  end
  end
end
^^
SET TERM ; ^^

con el anterior sp lo que hago es obtener un consecutivo de una factura la cual puede tener letras y el numero entero que se ve sin las letras algo aasi

con la ultima factura generada y guardada en la bd con el valor PA0045 después de ejecutar el SP el valor Factura del SP sera PA0046 y el numero sera 46

mcalmanovici 03-04-2007 18:23:47

Tema solucionado - Gracias.
 
Gente:
muchas gracias por la data. Me sirvio un montón la información que me suministraron. Lo pude hacer de una forma muy parecida a la que me dijo RONPABLO.
Mi código del procedure quitar letras quedó así.

DECLARE VARIABLE cont integer;
DECLARE VARIABLE longitudCadena integer;
DECLARE VARIABLE num varchar (1);
DECLARE VARIABLE CADENA_DE_NUMEROS varchar (30);

begin
/* code */
/*Me quedo con la longitud de la cadena que me mandaron*/
longitudCadena = strlen (CADENA);
/*Inicializo el contador para recorrer la cadena*/
cont = 1;
/*Inicializo la cadena en la cual voy a guardar los números de la orden de trabajo*/
CADENA_DE_NUMEROS = '';
/*Recorro la cadena*/
while (cont <= longitudCadena) do
begin
/*me quedo con la letra que se encuentra en la posición cont*/
num = substr(CADENA,cont,cont);
if (num between '0' and '9') then /*si la letra esta dentro de 0 a 9*/
CADENA_DE_NUMEROS = CADENA_DE_NUMEROS || num; /*concateno los números a los que ya tenía*/
cont = cont + 1; /*avanzo a la próxima letra*/
end
/*paso la cadena de letras a un número entero*/
NUMERO = cast(CADENA_DE_NUMEROS as integer);
end


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

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