【发布时间】:2018-11-17 17:18:25
【问题描述】:
这里是完整的 SQL 业余爱好者。我有一个谷歌表,用户在其中输入格式为A[B or C] 的数据。所以使用这张表:
+-------+-------------+-------------+
| A | B | C |
+-------+-------------+-------------+
| Apple | Red | Crunchy |
| Pear | | Crunchy |
| Lemon | | |
+-------+-------------+-------------+
..我希望得到以下回报:
输入apple[red] 返回Apple Red
输入apple[crunchy] 返回Apple Crunchy
因此,除了 A 之外,基本上只返回 B 或 C,具体取决于匹配发生在哪一列。实际上,crunchy 可以在任一列中 B 或 C(但不是两者)。
到目前为止我有这个:
Select A, B, C where
UPPER(H) matches '.*(?:^|,|,\s)"®EXEXTRACT(Q3,"^[^\[]+")&"(?:,\s|,|$).*'
and B matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"' limit 1
但显然它没有按我的意愿工作,并且匹配返回 A B C 预期。
所以我想我的问题是您能否根据匹配有条件地返回列,以及在B 和C 匹配中使用OR 的最佳方式是什么?我尝试只输入and B or C matches,但失败了。我想你可以写出像B matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"' or C matches '"&REGEXEXTRACT(Q3, "\[(\w+)\]")&"' 这样的另一行,但它开始变得相当复杂,我猜有一个更简单的方法。
我想知道的另一件事是,如果用户输入apple,则是否有一种方法可以使B 和C 都成为可选的,因此仅返回Apple。我打算用一张 if 和 2 个查询来执行此操作,具体取决于 [] 是否存在,但我想知道它是否可以在一个 SQL 语句中使用。
感谢您的帮助。这么多挠头不会留下任何头发!
【问题讨论】:
标签: sql google-sheets google-query-language