Полный SQL любитель здесь.У меня есть лист Google, где пользователь вводит данные в формате A[B or C]
.Таким образом, используя эту таблицу:
+-------+-------------+-------------+
| A | B | C |
+-------+-------------+-------------+
| Apple | Red | Crunchy |
| Pear | | Crunchy |
| Lemon | | |
+-------+-------------+-------------+
.. Я ожидал бы следующие возвраты:
ввод apple[red]
возврат Apple Red
ввод apple[crunchy]
возврат Apple Crunchy
Таким образом, в основном только B
или C
возвращаются в дополнение к A
в зависимости от того, в каком столбце произошло совпадение. В действительности 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
как и ожидалось.
Итак, я думаю, мои вопросы: вы можете условно вернуть столбец на основе совпадения, а также каков наилучший способ использования OR
для совпадения B
и C
?Я пытался просто поставить and B or C matches
, но это не удалось.Я полагаю, вы можете просто написать еще одну строчку, например B matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"' or C matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"'
, но все начинает становиться довольно запутанным, и я предполагаю, что есть более простой способ.
Еще одна вещь, которая меня интересует, это еслиэто способ сделать и B
, и C
необязательными, так что в приведенном выше примере, если пользовательский ввод apple
only Apple
возвращается.Я собирался сделать это с листами if
и двумя запросами, в зависимости от того, присутствует ли []
, но задавался вопросом, выполнимо ли это в одном операторе SQL.
Спасибо за любую помощь.Не останется волос с царапинами на голове!