我需要编写一个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'
答案 0 :(得分:1)
假设您的“单词”由空格定义,那么您可以执行以下操作:
UPDATE mytable
SET myfield = TRIM(REPLACE(' ' || myfield || ' ', ' abc ', ' xyz '))
WHERE myfield LIKE '% abc %';
这将在字符串的开头和结尾添加一个空格,进行替换,然后删除这些空格。