Я использую Oracle REGEXP_REPLACE для удаления всех нестандартных символов ascii (специальных) из поля freetext CLOB, который клиент использует для хранения данных, некоторые пользователи копируют и вставка из Excel, которая вызывает проблемы при чтении текста из CLOB. Мне удалось избавиться от всех специальных символов и сохранить макет для абзацев и т. Д.Oracle regexp_replace string cleanse в SQL-запросе, возвращающем полный набор данных, а не просто несоответствие строк
Проблема, с которой я сталкиваюсь, заключается в том, когда я сравниваю очищенное поле с оригиналом, после преобразования в строку символов, конечно, это возвращает строки, которые не имеют разницы между ними, я вытащил оба значения, и в большинстве случаев нет разницы. Это возвращение всего набора данных, а не только те, которые были cleansed.I've закончились идеи
FYI большая часть сохранения макета означает, что мне нужно, чтобы сохранить возврат каретки CHR (13)
Ниже приведен запрос
select *
from (
select incident, entity,
trim(to_char(textarea)) textarea,
trim(to_char(regexp_replace(textarea,'[^' || CHR(13) || CHR(32) || '-' || CHR(126) || ']',''))) regexp_text
from response
) tab
where tab.regexp_text <> tab.textarea
Я попробовал несколько различных комбинации с подрезкой пробельных и подстрок мелких строк и т.д., не повезло
Можете ли вы опубликовать некоторые примеры данных, с указанием ожидаемого и фактического результата? – Aleksej
@Aleksej Ожидаемым результатом будут строки, которые не соответствуют i.e 'éklzéiuhkn' и' klziuhkn', за исключением того, что он также возвращает строки, которые соответствуют, а также те, которые не соответствуют –
. Вы можете использовать http://stackoverflow.com/questions/22533037/how-to-call-oracle-md5-hash -функция для вычисления контрольной суммы MD5 для обоих столбцов результата, чтобы убедиться, что они действительно идентичны. –