为什么在Google Data Studio中只有第一个case语句被应用?

17

我在Google Data Studio中将这两个正则表达式规则合并到一个CASE语句中,但只有第一个规则被应用。

CASE
    WHEN REGEXP_MATCH(Seite, "^/amp/.*") THEN REGEXP_REPLACE(Seite, "^/amp/", "")
    WHEN REGEXP_MATCH(Seite, ".*-[0-9]+$") THEN REGEXP_REPLACE(Seite, "-[0-9]+$", "")
END

如果我交换规则的顺序,仍然只应用第一个规则;而不是第二个规则。为什么第二个规则没有被应用?我该如何使其同时应用两个规则?

16
这个问题正在Meta上进行讨论。 - cigien
6
我已经编辑了你的问题,以更好地展示我认为你想问什么。请看一下并添加实际想要实现的背景!为什么选择CASE语句? - Trilarion
11
这个问题可能需要更多的研究。你是否搜索过这个问题?你找到了什么? - Trilarion
4
有点牵强。这不是直接的重复(两个问题不同),而且这个问题的答案被深深地埋在原始问题中。 - Robert Harvey
4
我不理解你的观点。如果有人写了一个清晰的问题,我们就可以猜测问题可能是什么,但他们没有。有人编辑了它,猜测他们的意思,但表达仍然很差。问题在于糟糕的写作,而不在术语上。(我也曾评论说原始内容不清楚,应该关闭,有5个赞,但已被删除。)顺便说一句,你先说看起来像,但接着就说或者。所以你的意思并不是看起来像,而是不像,可能是这样的样子。因此,显然你同意这个问题不清楚。(而你自己的表达也不太清楚。) - philipxy
显示剩余7条评论
1个回答

29

这是预期的行为。 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]+$ 匹配的部分替换为 ''(空字符串)」


12
值得一提的是,[0-9]\d 在大多数情况下可以互换使用,但它们并不完全相同(参见https://unix.stackexchange.com/questions/414226/difference-between-0-9-digit-and-d/414230#414230)。 - zcoop98

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接