2014-11-13 3 views
2

Мне нужно заменить любые специальные символы пробелом из столбца ввода. Кроме того, необходимо также подавить любые одинарные кавычки.экранирование одиночных кавычек с использованием regexp_replace

Я пробовал это, что работало в замене специальных символов, но, тем не менее, оно не подавляло бы одинарные кавычки.

Входная строка из столбца базы данных: 'Престол CANDY SHOPS ВКЛЮЧЕН?

Если я не рассматривать одиночные кавычки, то \ W работает, чтобы удовлетворить первое условие.

select regexp_replace('SEES CANDY?SHOPS INCORPORATED', '\W', ' ') from dual; 

Output: SEES CANDY SHOPS INCORPORATED 

Однако Outout требуется:

ВИДИТ CANDY SHOPS Инкорпорейтед, рассматривая одиночные кавычки, убегая/подавления.

ответ

2
select regexp_replace('SEES''CANDY?SHOPS_INCORPORATED123', '[^[:alnum:]''_]', ' ') from dual; 

[:alnum:] Буквенно-цифровые символы. Включает буквы и цифры.

\W Символ неслово (не буква, а не число, а не символ подчеркивания).

Удалить одиночные кавычки затем заменить \ W с пространством:

select regexp_replace(replace(s, ''''), '\W', ' ') 
from (select q'[SEE'S candy?shops_incorporated123]' s from dual); 

q'[]' это просто цитата оператор Oracle (позволяет использовать одинарные кавычки внутри скобок без удвоения их, чтобы избежать)

+0

Спасибо , Но вы управляете строкой inout, добавив одну цитату, которая, конечно же, будет работать. Вход осуществляется из столбца базы данных. есть ли способ программно сделать это, сначала подавив одиночные кавычки. – Casey

+0

@ Casey Тогда я не задаюсь вопросом. Я думал, вам нужно заменить все \ W, кроме одной цитаты. Поэтому вам нужно удалить все одинарные кавычки, а затем заменить другие специальные символы пробелом. Я прав? – Multisync

+0

Да. Кавычки с одиночными кавычками также должны исчезнуть, за исключением того, что их нужно просто подавить. В приведенном выше примере SEE'S должен просто стать SEES. Следующим шагом будет использование \ W для замены специальных символов пробелом, как я сделал ранее. – Casey

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