Как заменить только целые слова с помощью Firebird? - PullRequest
0 голосов
/ 17 мая 2019

Мне нужно написать текст SQL для замены только целых слов.

Для "целого слова" я имею в виду все вхождения, которые не являются частью другого буквенно-цифрового слова.

Пример:

Замена 'abc' на 'xyz'

| MYFIELD |
| 'test abc test' |
| 'abctest' |
| 'testabctest' |
| 'testabc' |
| 'abc test' |
| 'test abc' |
| 'abc' |
| ' abc ' |

Ожидаемый результат:

| MYFIELD |
| 'test xyz test' |
| 'abctest' |
| 'testabctest' |
| 'testabc' |
| 'xyz test' |
| 'test xyz' |
| 'xyz' |
| ' xyz ' |

Я подготовил пример с использованием обычного механизма регулярных выражений.

Я пытался перенести тот же RegEx в Firebird SQL, используя SIMILAR TO , но он не работал должным образом:

UPDATE mytable
SET mytable = REPLACE(myfield, 'abc', 'xyz')
WHERE myfield SIMILAR TO '\babc\b'

1 Ответ

1 голос
/ 17 мая 2019

Предполагая, что ваши "слова" определены пробелами, вы можете сделать:

UPDATE mytable
    SET myfield = TRIM(REPLACE(' ' || myfield || ' ', ' abc ', ' xyz '))
WHERE myfield LIKE '% abc %';

Это добавляет пробел в начале и конце строки, выполняет замену, а затем удаляет пробелы.

...