Замена символов в строке на заданные. Прошу совета

kovalevan777
Дата: 26.10.2015 17:06:35
Добрый день.
Столкнулся с двумя проблемами, а именно:

База данных системы PowerDesigner содержит столбцы, в которые пишет псевдоюникод, а точнее его обозначения обычным текстом, да еще и в RTF.
То есть строки с кириллицей получаются вида:
автор
{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset204 Microsoft Sans Serif;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\f0\fs20\'c8\'ed\'f2\'e5\'f0\'f4\'e5\'e9\'f1 \'ee\'f2\'ea\'f0\'fb\'f2\'e8\'ff \'ea\'ee\'ef\'e8\'e9 \'eb\'e8\'f6\'e5\'e2\'fb\'f5 \'f1\'f7\'e5\'f2\'ee\'e2 \'e2 FCC CASA \'e8\'e7 MIDAS\lang1033\f1\par
}
.

Вот никак не могу привести данную строку к нормальному виду. Скрипт обрезки лишнего с RTF-ной строки нашел, работает. Остается проблема с кириллицей.
Написал case по замене всего алфавита из данного псевдоюникода во что то читаемое, но потом понял, что кейс заменит мне всю строку, а не отдельные символы.

Первый вопрос: каким образом можно заменить именно символы в строке, а не всю строку целиком?
Второй вопрос: Символы, которые необходимо заменить, начинаются с верхних одиночных кавычек и у меня не получается вставить их в скрипт - комфликтует с ковычками, выделяющими необходимую для замены часть.

Пример (не рабочий, но наглядный):
case
автор
WHEN table1 like '%c0%' THEN 'А'
WHEN table1 like ''c1%' THEN ''Б'
WHEN table1 like ''%c2%' THEN ''В'

Проблема с зелеными запятыми.

Помогите советом, кто разбирается в подобных проблемах.

Заранее спасибо)
кто-то-из-толпы
Дата: 26.10.2015 17:30:43
Если регилия позволяет пользовать функции, то можно что-то типа такого запилить:

CREATE OR REPLACE FUNCTION f_CONVERT (
   MACstring            IN   VARCHAR2
)
   RETURN VARCHAR2
IS
   var_convert VARCHAR2(4000) := ' ';
BEGIN
var_convert:= MACstring;
var_convert:= replace(var_convert,'@a','а');
var_convert:= replace(var_convert,'@b','б');
var_convert:= replace(var_convert,'@v','в');
var_convert:= replace(var_convert,'@g','г');
var_convert:= replace(var_convert,'@d','д');
var_convert:= replace(var_convert,'@e','е');
var_convert:= replace(var_convert,'@wyo','ё');
var_convert:= replace(var_convert,'@wzh','ж');
var_convert:= replace(var_convert,'@z','з');
var_convert:= replace(var_convert,'@i','и');
var_convert:= replace(var_convert,'@k','к');
var_convert:= replace(var_convert,'@l','л');
var_convert:= replace(var_convert,'@m','м');
var_convert:= replace(var_convert,'@n','н');
var_convert:= replace(var_convert,'@o','о');
var_convert:= replace(var_convert,'@p','п');
var_convert:= replace(var_convert,'@r','р');
var_convert:= replace(var_convert,'@s','с');
var_convert:= replace(var_convert,'@t','т');
var_convert:= replace(var_convert,'@u','у');
var_convert:= replace(var_convert,'@f','ф');
var_convert:= replace(var_convert,'@h','х');
var_convert:= replace(var_convert,'@c','ц');
var_convert:= replace(var_convert,'@wyj','й');
var_convert:= replace(var_convert,'@wch','ч');
var_convert:= replace(var_convert,'@wsh','ш');
var_convert:= replace(var_convert,'@wst','щ');
var_convert:= replace(var_convert,'@wyi','ъ');
var_convert:= replace(var_convert,'@wii','ы');
var_convert:= replace(var_convert,'@wyy','ь');
var_convert:= replace(var_convert,'@wee','э');
var_convert:= replace(var_convert,'@wyu','ю');
var_convert:= replace(var_convert,'@way','я');
var_convert:= replace(var_convert,'@A','А');
var_convert:= replace(var_convert,'@B','Б');
var_convert:= replace(var_convert,'@V','В');
var_convert:= replace(var_convert,'@G','Г');
var_convert:= replace(var_convert,'@D','Д');
var_convert:= replace(var_convert,'@E','Е');
var_convert:= replace(var_convert,'@WYO','Ё');
var_convert:= replace(var_convert,'@WZH','Ж');
var_convert:= replace(var_convert,'@Z','З');
var_convert:= replace(var_convert,'@I','И');
var_convert:= replace(var_convert,'@K','К');
var_convert:= replace(var_convert,'@L','Л');
var_convert:= replace(var_convert,'@M','М');
var_convert:= replace(var_convert,'@N','Н');
var_convert:= replace(var_convert,'@O','О');
var_convert:= replace(var_convert,'@P','П');
var_convert:= replace(var_convert,'@R','Р');
var_convert:= replace(var_convert,'@S','С');
var_convert:= replace(var_convert,'@T','Т');
var_convert:= replace(var_convert,'@U','У');
var_convert:= replace(var_convert,'@F','Ф');
var_convert:= replace(var_convert,'@H','Х');
var_convert:= replace(var_convert,'@C','Ц');
var_convert:= replace(var_convert,'@WYJ','Й');
var_convert:= replace(var_convert,'@WCH','Ч');
var_convert:= replace(var_convert,'@WSH','Ш');
var_convert:= replace(var_convert,'@WST','Щ');
var_convert:= replace(var_convert,'@WYI','Ъ');
var_convert:= replace(var_convert,'@WII','Ы');
var_convert:= replace(var_convert,'@WYY','Ь');
var_convert:= replace(var_convert,'@WEE','Э');
var_convert:= replace(var_convert,'@WYU','Ю');
var_convert:= replace(var_convert,'@WAY','Я');
var_convert:= replace(var_convert,'@WZA',',');
var_convert:= replace(var_convert,'@WZB','№');
var_convert:= replace(var_convert,'@WZC','-');
var_convert:= replace(var_convert,'@@','@');

 RETURN var_convert;

EXCEPTION
   WHEN OTHERS
   THEN
      RETURN ' ';
END f_CONVERT;
kovalevan777,
кто-то-из-толпы
Дата: 26.10.2015 17:32:42
kovalevan777,

соответственно в функции используй свои замены.
одиночный апостроф в строке заменяй двумя.
что за задача?
Дата: 26.10.2015 17:43:05
kovalevan777
База данных системы PowerDesigner содержит столбцы
полагаю powerdesigner умеет работать со своей "базой" сам.
kovalevan777
Дата: 27.10.2015 09:39:41
что за задача?,

PD умеет работать со своей базой, а вот SAP BO, на котором необходимо составить отчет, работать с ней, к сожалению, не умеет.
mcureenab
Дата: 27.10.2015 09:59:16
кто-то-из-толпы
Если регилия позволяет пользовать функции, то можно что-то типа такого запилить:

CREATE OR REPLACE FUNCTION f_CONVERT (
   MACstring            IN   VARCHAR2
)
   RETURN VARCHAR2
IS
   var_convert VARCHAR2(4000) := ' ';
BEGIN
var_convert:= MACstring;
var_convert:= replace(var_convert,'@a','а');
...
var_convert:= replace(var_convert,'@@','@');

 RETURN var_convert;

EXCEPTION
   WHEN OTHERS
   THEN
      RETURN ' ';
END f_CONVERT;
kovalevan777,


Тут ситуация проще. Буквы hex кодами записаны. Можно за один проход перекодировать.
mcureenab
Дата: 27.10.2015 10:03:14
kovalevan777
что за задача?,

PD умеет работать со своей базой, а вот SAP BO, на котором необходимо составить отчет, работать с ней, к сожалению, не умеет.
похоже, задача - одинарные кавычки в строковом литерале экранировать.

\'ee ->
'\''ee'
смешались в кучу
Дата: 27.10.2015 10:07:14
kovalevan777
что за задача?,

PD умеет работать со своей базой, а вот SAP BO, на котором необходимо составить отчет, работать с ней, к сожалению, не умеет.
то, что ты не умеешь работать с инструментами, никак не поясняет цель задачи.
Bassaev
Дата: 27.10.2015 11:08:43
Предлагаю, попробовать функцию Транслейт, должна помочь.
трансзапоздалый
Дата: 27.10.2015 12:15:30
Bassaev
Предлагаю, попробовать функцию Транслейт, должна помочь.
в чем помочь?