如何使用Firebird仅替换整个单词?

时间:2019-05-17 07:47:29

标签: sql regex replace firebird firebird-3.0

我需要编写一个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 ' |

我已经使用通用的正则表达式引擎准备了example

我尝试使用SIMILAR TO在Firebird SQL中移植相同的RegEx,但未按预期工作:

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

1 个答案:

答案 0 :(得分:1)

假设您的“单词”由空格定义,那么您可以执行以下操作:

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

这将在字符串的开头和结尾添加一个空格,进行替换,然后删除这些空格。