数组索引在Cloud Spanner中超出范围

时间:2017-02-15 23:57:48

标签: google-cloud-spanner

我有以下查询:

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.

为什么即使第一部分不正确,第二部分也会被评估?如何检查数组是否有一个具有特定值的元素?

1 个答案:

答案 0 :(得分:0)

通常,SQL不对评估顺序做出任何保证(与提供短路评估的C ++语言不同)。在评估左侧之前,引擎可以自由评估AND的右侧。您可以use IF(cond,then-clause,else-clause)强制执行特定评估订单。

以这种方式重写,您的查询将是:

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