STRZERO no Firebird
Lembra daquela excelente função do Clipper (e outras linguagens) para colocar zeros à esquerda de uma string? Em um projeto precisei usá-la no meu bd em Firebird sem utilizar UDF para preencher automaticamente dígitos de crachá e outras funções. Segue DDL da Stored Procedure. Copie e cole no Script Executive do IBExpert ! Bom proveito.
SET TERM ^ ;
create or alter procedure STRZERO (
STRING varchar(254),
DIGITOS smallint = 1)
returns (
RETORNO varchar(254))
as
declare variable AUX varchar(254) = '';
declare variable I integer = 0;
declare variable TAMANHOSTR integer;
begin
/* Coloca a quantidade informada no 2o parametros de "Zeros" a direita da string
O parametro digitos e o tamanho maximo de digitos da string
ex: string de 5 digitos com entrada '99' ficara '00099' */
select char_length(trim(:string))
from rdb$database
into :tamanhostr;
aux = '';
while (i<(:digitos-:tamanhostr)) do
begin
aux= '0'||aux;
i=i+1;
end
select :aux||trim(:string)
from rdb$database
into :retorno;
suspend;
end^
SET TERM ; ^
COMMENT ON PARAMETER STRZERO.STRING IS'string que se vai adicionar os zeros a direita';
COMMENT ON PARAMETER STRZERO.DIGITOS IS'quantidade de digitos que a string conterá.';
GRANT EXECUTE ON PROCEDURE STRZERO TO SYSDBA;
SET TERM ^ ;
create or alter procedure STRZERO (
STRING varchar(254),
DIGITOS smallint = 1)
returns (
RETORNO varchar(254))
as
declare variable AUX varchar(254) = '';
declare variable I integer = 0;
declare variable TAMANHOSTR integer;
begin
/* Coloca a quantidade informada no 2o parametros de "Zeros" a direita da string
O parametro digitos e o tamanho maximo de digitos da string
ex: string de 5 digitos com entrada '99' ficara '00099' */
select char_length(trim(:string))
from rdb$database
into :tamanhostr;
aux = '';
while (i<(:digitos-:tamanhostr)) do
begin
aux= '0'||aux;
i=i+1;
end
select :aux||trim(:string)
from rdb$database
into :retorno;
suspend;
end^
SET TERM ; ^
COMMENT ON PARAMETER STRZERO.STRING IS'string que se vai adicionar os zeros a direita';
COMMENT ON PARAMETER STRZERO.DIGITOS IS'quantidade de digitos que a string conterá.';
GRANT EXECUTE ON PROCEDURE STRZERO TO SYSDBA;
Do Firebird 2.1 podemos usar o LPAD() para isso
ResponderExcluirhttps://firebirdsql.org/refdocs/langrefupd21-intfunc-lpad.html