Solución:
Aquí una muestra de cómo dividir la cadena y escribir las subcadenas en una tabla:
create procedure SPLIT_STRING (
AINPUT varchar(8192))
as
declare variable LASTPOS integer;
declare variable NEXTPOS integer;
declare variable TEMPSTR varchar(8192);
begin
AINPUT = :AINPUT || ',';
LASTPOS = 1;
NEXTPOS = position(',', :AINPUT, LASTPOS);
while (:NEXTPOS > 1) do
begin
TEMPSTR = substring(:AINPUT from :LASTPOS for :NEXTPOS - :LASTPOS);
insert into new_table("VALUE") values(:TEMPSTR);
LASTPOS = :NEXTPOS + 1;
NEXTPOS = position(',', :AINPUT, LASTPOS);
end
suspend;
end
Estoy publicando la versión modificada de Michael, tal vez sea útil para alguien.
Los cambios son:
- SPLIT_STRING es un procedimiento seleccionable.
- Es posible un delimitador personalizado.
- También analiza los casos en los que el delimitador es un primer carácter en P_STRING.
set term ^ ;
create procedure split_string (
p_string varchar(32000),
p_splitter char(1) )
returns (
part varchar(32000)
)
as
declare variable lastpos integer;
declare variable nextpos integer;
begin
p_string = :p_string || :p_splitter;
lastpos = 1;
nextpos = position(:p_splitter, :p_string, lastpos);
if (lastpos = nextpos) then
begin
part = substring(:p_string from :lastpos for :nextpos - :lastpos);
suspend;
lastpos = :nextpos + 1;
nextpos = position(:p_splitter, :p_string, lastpos);
end
while (:nextpos > 1) do
begin
part = substring(:p_string from :lastpos for :nextpos - :lastpos);
lastpos = :nextpos + 1;
nextpos = position(:p_splitter, :p_string, lastpos);
suspend;
end
end^
set term ; ^
Utilice POSITION http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-position.html
y
SUSTRING http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-substring.html
funciones en la sentencia WHILE DO
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)