Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Oracle-如何用相应字符替换dec表示法中的utf子字符串_String_Oracle_Encoding - Fatal编程技术网

String Oracle-如何用相应字符替换dec表示法中的utf子字符串

String Oracle-如何用相应字符替换dec表示法中的utf子字符串,string,oracle,encoding,String,Oracle,Encoding,我有一个varchar2字段,它的值如下:abc&193&158ef,我需要用DB编码cp-1250中的相应字符替换所有UTF子字符串,例如&123 有什么建议吗?您可以使用数据类型而不是VARCHAR2数据类型。查看查看NLS_数据库_参数以确定NVARCHAR2字符集,它将始终支持unicode。因此,我自己回答。首先创建一个函数: CREATE OR REPLACE FUNCTION decode_string(in_string VARCHAR2) RETURN VARCHAR2 IS

我有一个varchar2字段,它的值如下:abc&193&158ef,我需要用DB编码cp-1250中的相应字符替换所有UTF子字符串,例如&123


有什么建议吗?

您可以使用数据类型而不是VARCHAR2数据类型。查看查看NLS_数据库_参数以确定NVARCHAR2字符集,它将始终支持unicode。

因此,我自己回答。首先创建一个函数:

CREATE OR REPLACE FUNCTION decode_string(in_string VARCHAR2) RETURN VARCHAR2
IS
working_string VARCHAR2(4000) := in_string;
regexp VARCHAR2(20):= '&#[[:digit:]]{3}';
utf_code CHAR(5);
replaced_char CHAR(1);
BEGIN
    LOOP
        utf_code := regexp_substr(working_string, regexp);
        EXIT WHEN utf_code IS NULL;
        replaced_char := CHR(SUBSTR(utf_code, -3, 3));
        working_string := REPLACE(utf_code, replaced_char);
    END LOOP;
    RETURN working_string;
END;
然后在clasic update语句中使用此函数:

UPDATE foo
SET strfield = decode_string(strfield)
WHERE strfield LIKE '%&#___%';

好的,但我需要替换UTF十进制符号子字符串,而不是创建新字段。我需要在dec符号中找到所有有效的UTF子字符串,并用cp-1250中相应的字符替换它们,例如,&193->祝贺解决方案成功。当你有能力时,请确保将你的答案标记为“已接受”,以便其他人可以从你的成功中学习。干杯~