Перевернутый вопросительный знак часто используется, когда сохраненный символ не может быть отрисован клиентом. Так часто данные в базе данных в порядке, это ограничение для клиента.
Моим первым шагом будет использование функции DUMP для идентификации байтов.
В качестве первого шага я бы удалил общие «известные действительные» символы (буквенно-цифровые и пробелы)
select DUMP(translate(upper(col),'~ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .,','~'),16) dmp,
translate(upper(col),'~ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .,','~') val
from ...
where translate(upper(col),'~ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .,','~') is not null;
Тогда я сосредоточусь на том, что осталось. Обычно есть куча редких, но приемлемых знаков препинания (точка, запятая, дефис, апостроф и т. Д.). Я исключаю их по одному.
Все, что я не могу исключить, я исследую (т. Е. Google эти байты, поэтому я использую опцию '16' с DUMP, чтобы получить их в шестнадцатеричном виде). Вероятно, это какой-то акцентированный символ или цитата типа «тест», а не мягкий «тест».