Как заменить только целые слова с помощью Firebird?

Мне нужно написать текст 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 'abc'

Всего 1 ответ


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

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

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


Есть идеи?

10000