Функция на Informix для замены символов не работает

Я пытался создать функцию, чтобы получить значение, заменить определенный символ и вернуть его.

Данные о характеристиках таблиц

caracter remplazo 
Ñ          N
ñ          n
á          a
é          e
Ê          E                              

Функция

create function "informix".arreglar_cadenaAndSec(rt_nombre char(50))
    Returning char(50)
    Define fix_caracter char(3);
    Define fix_remplazo char(3);
    FOREACH SELECT caracter,remplazo
        INTO fix_caracter,fix_remplazo
        FROM caracteres     
        Let rt_nombre=replace(rt_nombre,fix_caracter,fix_remplazo);
    END FOREACH
    return rt_nombre;
End Function; 

Вход

FÊLIX                                        

Вывод

FÊLIX                                        

Желаемый результат

FELIX                                        
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте использовать функцию TRIM() для аргументов old_string и new_string функции REPLACE(), как в этом примере:

create table characters(character char(3), replchar char(3));
insert into characters values("A", "a");
insert into characters values("C", "c");
insert into characters values("E", "e");

create function replchar(s1 char(50))
returning char(50);
define cin char(3);
define crepl char(3);
foreach select character, replchar into cin, crepl
from characters
  let s1 = replace(s1, trim(cin), trim(crepl));
end foreach
return s1;
end function;
  
execute function replchar("ABCDEF");

Это дает результат:

aBcDeF

Я не смог воспроизвести вашу проблему. Я использовал этот код, чтобы попытаться воспроизвести его:

select replace("platypus and wombat - archetypal critters", "y", "elephant") as answer from dual;

Это дает: platelephantpus and wombat - archetelephantpal critters

select replace("platypus aÑd wombat - archetypal critters", "Ñ", "**N**") as answer from dual;

Это дает: platypus a**N**d wombat - archetypal critters

Оба они просто проверяют функцию REPLACE, в том числе на буквах с акцентом.

Затем, пробуя ваш сценарий:

create function "informix".arreglar_cadenaAndSec(rt_nombre char(50))
    Returning char(50)
    Define fix_caracter char(3);
    Define fix_remplazo char(3);
    FOREACH SELECT caracter,remplazo
        INTO fix_caracter,fix_remplazo
        FROM caracteres     
        Let rt_nombre=replace(rt_nombre,fix_caracter,fix_remplazo);
    END FOREACH
    return rt_nombre;
End Function;

create table caracteres(caracter varchar(5) not null, remplazo varchar(10) not null);

insert into caracteres values('Ñ', 'N');
insert into caracteres values('ñ', 'n');
insert into caracteres values('á', 'a');
insert into caracteres values('é', 'e');
insert into caracteres values('Ê', 'E');

execute function arregular_cadenaAndSec('Qua (Ñ N) (ñ n) (á a) (é e) (Ê E)');

Выход из этого:

Qua (N  N) (n  n) (a  a) (e  e) (E  E)

Я думаю, это то, что вы хотели бы получить от данных записей в таблице caracteres.

Я тестирую IDS 14.10.FC1DE на RHEL 7.4. Моя среда:

DBDATE=Y4MD-
DBEDIT=vim
INFORMIXCONCSMCFG=/work1/informix/jl-ibm-14.10.FC1/etc/concsm.njdc_ldev04_23
INFORMIXDIR=/work1/informix/jl-ibm-14.10.FC1
INFORMIXSERVER=njdc_ldev04_23
INFORMIXTERM=terminfo
LANG=en_US.UTF-8
LC_COLLATE=C
LD_LIBRARY_PATH=/lib64:/usr/lib64:/usr/gcc/v12.2.0/lib64:/usr/gcc/v12.2.0/lib:/lib:/usr/lib:/work1/informix/jl-ibm-14.10.FC1/lib:/work1/informix/jl-ibm-14.10.FC1/lib/esql:/work1/informix/jl-ibm-14.10.FC1/lib/cli
ONCONFIG=onconfig.njdc_ldev04_23
PATH=.:/work2/jleffler/bin:/u/jleffler/bin:/work1/informix/jl-ibm-14.10.FC1/bin:/atria_release/cmbin:/atria_release/cmbin/mergescripts:/atria_release/cm_dist/vobs/imitools/bin:/usr/atria/bin:/u/jleffler/aux/njdc-ldev04:/usr/perl/v5.34.0/bin:/usr/gcc/v12.2.0/bin:/usr/local/bin:/usr/bin:/usr/sbin:/opt/rational/clearcase/bin
SQLCMDLOG=/work2/jleffler/.sqlcmdlog
SQLEXEC=sqlrm
TERM=xterm-256color
TERMINFO=/u/jleffler/terminfo

Другие вопросы по теме