2017-02-15 1 views
0

У меня есть следующий запрос:Индекс массива находится вне границ в облаке Гаечный

SELECT * FROM Concerts 
WHERE (ARRAY_LENGTH(TicketPrices) > 0 AND TicketPrices[OFFSET(0)] IS NOT NULL); 

и я получил:

ERROR: OUT_OF_RANGE: Array index 0 is out of bounds. 

Почему вторая часть оценивается даже тогда, когда первая часть не правда? Как проверить, имеет ли массив один элемент с определенным значением?

ответ

0

В общем, SQL не дает никаких гарантий относительно порядка оценки (в отличие от языков C++, которые предлагают оценку короткого замыкания). Двигатель может оценить правую сторону И перед оценкой левой стороны. Вы можете указать useIF(cond,then-clause,else-clause), чтобы задать конкретный оценочный код.

переписан таким образом, ваш запрос будет:

SELECT * FROM Concerts 
WHERE IF(ARRAY_LENGTH(TicketPrices) > 0, TicketPrices[OFFSET(0)] IS NOT NULL, FALSE); 
Смежные вопросы