Oracle - как заменить подстроку utf в десятичной записи символом ответа - PullRequest
0 голосов
/ 24 октября 2011

У меня есть поле varchar2 с такими значениями: "abc & # 193 & # 158ef" , и мне нужно заменить все подстроки UTF (например, # & 123) соответствующими символами в кодировка БД (cp-1250) .

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Итак, я отвечаю сам. Сначала создайте функцию:

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;

Затем используйте эту функцию в классическом операторе обновления:

UPDATE foo
SET strfield = decode_string(strfield)
WHERE strfield LIKE '%&#___%';
0 голосов
/ 24 октября 2011

вы можете использовать тип данных NVARCHAR2 вместо типа данных VARCHAR2 .Посмотрите в представлении NLS_DATABASE_PARAMETERS, чтобы определить набор символов NVARCHAR2 (он всегда будет поддерживать юникод).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...