2015-10-20 5 views
2

У меня огромный стол testTable. Я пытаюсь очистить колонку txt, оставив только буквы и пробелы.Зачем REGEXP_REPLACE бросать непереводимый символ? Это ошибка?

Вот что я

SELECT id_cd, REGEXP_REPLACE(txt, '[^a-zA-Z ]', '', 1, 0, 'i') new_txt 
FROM testTable 

выше запрос бросает String contains an untranslatable character. Я не знаю, из какой строки это происходит, потому что таблица огромна.

Когда я ограничиваю количество строк до небольшого числа, он работает, поэтому синтаксис запроса прекрасен.

SELECT TOP 10 id_cd, REGEXP_REPLACE(txt, '[^a-zA-Z ]', '', 1, 0, 'i') new_txt 
FROM testTable 

Это ошибка? Как я могу определить строку, в которой это не удается? Почему это может потерпеть неудачу в первую очередь?


Я также попытался следующие:

SELECT id_cd, REGEXP_REPLACE(TRANSLATE(txt using unicode_to_latin), '[^a-zA-Z ]', '', 1, 0, 'i') new_txt 
FROM testTable 

Но и получил ту же ошибку.

+0

Использование с функцией ошибки в переводе. –

ответ

1

У нас такая же проблема в начале года. Вы можете найти эти символы, используя функцию translate_chk, которая возвращает 0, если символ успеха еще не равен нулю. Мы обрабатываются как ниже

case when translate_chk(d.column using latin_to_unicode) <> '0' 
    then 0 
    else Instr(d.column , 'E3S') 
    end column 

Но в этом случае мы не заботились о потерянных данных, мы загрузили 0 для этого. Надеюсь, что это поможет.

+0

Спасибо. один вопрос: почему вы используете latin_to -unicode? Я думал, что unicode_to_latin меньше включительно. – Emily

+0

По умолчанию система создает столбцы с латинским набором символов. Мы делали миграцию из oracle, поэтому при загрузке мы обнаружили, что данные имеют Unicode. Вот почему мы это сделали ..., но мы должны быть уверены в том, что он как unicode поставляется со стоимостью дополнительного места. –

Смежные вопросы