Как запустить запрос Google-sheets в текстовой ячейке, содержащей звездочку

#sql #regex #google-sheets #escaping #google-sheets-query

#sql #регулярное выражение #google-sheets #экранирование #google-sheets-query

Вопрос:

Когда я использую этот запрос в Google sheets

 =QUERY('Kontoutdrag länsförsäkringar'!$A$3:$F$1000186;"SELECT sum(F) WHERE B >= date'" amp; TEXT(DATEVALUE(J$4);"yyyy-mm-dd") amp; "' AND B <= date '"amp; TEXT(DATEVALUE(J$5);"yyyy-mm-dd") amp;"' AND D matches '" amp; JOIN("|";$T10:$CZ10) amp;"' AND D != '' label sum(F)'' ")
  

Он пропустит любую ячейку, содержащую звездочку где-нибудь в тексте, символ

 *
  

Ошибка в этой части соответствия

 AND D matches '" amp; JOIN("|";$T10:$CZ10)
  

Если текст столбца D (и соответствующая идентичная ячейка в диапазоне соединения) содержит звездочку, он не будет соответствовать.

Есть ли способ избежать этого, чтобы у меня могли быть ячейки со звездочкой в тексте?

Это значение будет работать

 K Batteriexp
  

Это значение не будет получено запросом

 K*Batteriexp
  

Комментарии:

1. * является квантором в регулярном выражении (значение: ноль или более раз). Вы пытались изменить ‘matches’ на ‘contains’?

2. Вы пробовали предложение @JPV от MattWelander? Работает ли это в вашей ситуации?

3. @JPV Это не сработает. OP использует | оператор OR для регулярного выражения

4. Да, конечно. Вероятно, сегодня утром было недостаточно кофе. ;-/ Спасибо, что указали на это @TheMaster.

5. Я боюсь, что использование contains может привести к двойным совпадениям, правило «mat» будет соответствовать транзакциям с текстом «matmagasinet» и «matsmart», верно?

Ответ №1:

Если звездочка — единственная проблема, вы можете избежать ее с помощью регулярного выражения:

 AND D matches '" amp; ARRAYFORMULA(JOIN("|";REGEXREPLACE($T10:$CZ10,"*","\*")))
  

Это

 K*Batteriexp //Means 'K' repeated 0 or more times
  

становится

 K*Batteriexp //means a literal *