这是预期的行为。 CASE
语句只运行第一个计算结果为 true 的表达式,而不是所有计算结果为 true 的表达式。
根据Data Studio文档的说明:
CASE评估每个连续的WHEN子句,并返回条件为true的第一个结果。任何剩余的WHEN子句和ELSE结果都不会被评估。如果所有WHEN条件都为false或NULL,则CASE返回ELSE结果,如果不存在ELSE子句,则返回NULL。
如果您想对单个字符串运行多个正则表达式,您需要创建一个组合所有正则表达式的通用正则表达式,或者嵌套这些规则,确保一个规则将在前一个规则之后应用。
对于您的特定情况,我看不出在CASE
语句中运行REGEXP_MATCH
然后REGEXP_REPLACE
的原因。 相反,只需运行REGEXP_REPLACE
,就完成了(如果正则表达式不匹配,则原始字符串不会更改)。
在一条指令中运行多个正则表达式替换的示例:
REGEXP_REPLACE(Seite, "(^/amp/|-[0-9]+$)", "")
请注意使用 |
(竖杠) 分隔符来执行一个 或
操作。实际上,它的意思是:「将字符串中所有与 ^/amp/
或 -[0-9]+$
匹配的部分替换为 ''
(空字符串)」。
[0-9]
和 \d
在大多数情况下可以互换使用,但它们并不完全相同(参见https://unix.stackexchange.com/questions/414226/difference-between-0-9-digit-and-d/414230#414230)。 - zcoop98