Oracle Pl/SQL函数返回带有已更改字符的字符串
如何编写一个简单的函数,在参数更改后返回,使其不再包含某些符号Oracle Pl/SQL函数返回带有已更改字符的字符串,oracle,function,plsql,Oracle,Function,Plsql,如何编写一个简单的函数,在参数更改后返回,使其不再包含某些符号 (č=>c,ć=>c,š=>s,đ=>d,ž=>z.) e、 g.*urđević*=>“*djurdjevic*” e、 g.*kuća*=>*kuca* e、 g.*čaćkati*=>*cackati* 到目前为止我还没有代码。我对这方面很陌生,正在努力学习一些东西。查看翻译 例如: TRANSLATE('1tech23', '123', '456') Result: '4tech56' 你可以试试这个功能 SELECT
(č=>c,ć=>c,š=>s,đ=>d,ž=>z.)
e、 g.*urđević*=>“*djurdjevic*”
e、 g.*kuća*=>*kuca*
e、 g.*čaćkati*=>*cackati*
到目前为止我还没有代码。我对这方面很陌生,正在努力学习一些东西。查看翻译
例如:
TRANSLATE('1tech23', '123', '456')
Result: '4tech56'
你可以试试这个功能
SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1')
FROM DUAL;
CONVERT('ÄÊÍÕØABCDE'
---------------------
A E I ? ? A B C D E ?
这是在不创建任何结构的情况下可以获得的最接近的值:
SELECT utl_raw.cast_to_varchar2((nlssort('čaćkati', 'nls_sort=binary_ai')))
FROM dual;
如果您有很多组合,我建议您创建一个包含可能组合的表,并使用
TRANSLATE
功能。对于克罗地亚字符,您可以使用TRANSLATE
和REPLACE
的组合,因为TRANSLATE
不支持一对多翻译(例如,đ=>dj)
SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1')
FROM DUAL;
CONVERT('ÄÊÍÕØABCDE'
---------------------
A E I ? ? A B C D E ?
以及输出:
out
--------------------------
djak zvakaca cicak suma
编辑
下面是两个实现此功能的包装器函数。第一个使用内置的,而另一个有自己的自定义实现
-- first
CREATE OR REPLACE FUNCTION f_translate(p_string IN VARCHAR)
RETURN VARCHAR
AS
BEGIN
RETURN REPLACE(TRANSLATE(p_string,'žćčš', 'zccs'), 'đ', 'dj');
END;
-- second
CREATE OR REPLACE FUNCTION f_translate_custom(p_string IN VARCHAR)
RETURN VARCHAR
AS
v_current varchar(1);
v_retval VARCHAR(255);
BEGIN
FOR i IN 1..LENGTH(p_string) LOOP
v_current := SUBSTR(p_string, i, 1);
v_retval := v_retval || CASE v_current
WHEN 'č' THEN 'c'
WHEN 'ć' THEN 'c'
WHEN 'ž' THEN 'z'
WHEN 'š' THEN 's'
WHEN 'đ' THEN 'dj'
ELSE v_current
END;
END LOOP;
RETURN v_retval;
END;
还有一些测试代码
SET SERVEROUTPUT ON;
BEGIN
DBMS_OUTPUT.PUT_LINE('Built-in: ' || f_translate('đak žvakaća čičak šuma'));
DBMS_OUTPUT.PUT_LINE('Custom: ' || f_translate_custom('đak žvakaća čičak šuma'));
END;
非常感谢。但是如何将其形成一个具有适当结构的函数呢