Как заменить символ одинарной кавычки двумя символами одинарной кавычки - PullRequest
0 голосов
/ 07 января 2019

Я хочу заменить все вхождения строковой кавычки (') на две одинарные кавычки ('') в строке.

Допустим, e'QmfgLu/]sf]/sd - это строка, и я хочу заменить ' на ''.

Результат должен быть e''OmfgLu/]

Я пробовал этот запрос:

update customer set name=REGEXP_REPLACE(name, E'\'', '''');

также

 update customer set name=REPLACE(name, E'\'', '''');

Этот запрос не работает должным образом. Каков подходящий способ написания запроса?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вы можете заменить одно вхождение одинарных кавычек на 2 кавычки, используя это регулярное выражение.

update customer set name=REGEXP_REPLACE(name, $$([^'])'([^'])$$, $$\1''\2$$ ,'g');

$$([^'])'([^'])$$ - представляет собой последовательность любого символа, кроме одинарной кавычки, за которой следует кавычка, а затем символ без кавычек.

Я использую долларовую котировку , чтобы избежать путаницы в цитатах.

Демо

EDIT

Как указал @edruid, для обработки регистра для кавычек в начале и конце строки используйте: REGEXP_REPLACE(name, $$([^']|^)'(?!')$$, $$\1''$$ ,'g')

Используется negative lookahead для сопоставления одинарной кавычки - (?!')

Demo2

0 голосов
/ 07 января 2019

В postgres способ иметь одинарную кавычку в строке - это набрать '' ('в качестве escape-символа), так что ваша замена будет

update customer set name=REGEXP_REPLACE(name, E'''', '''''', 'g');

(пропустите последний 'g', если вы хотите заменить только первый ')

или не прибегая к регулярному выражению:

update customer set name=REPLACE(name, '''', '''''');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...