数组索引在 Cloud Spanner 中超出范围
Array index is out of bounds in 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.
为什么在第一部分不正确的情况下评估第二部分?如何检查数组是否有一个具有特定值的元素?
一般来说,SQL 不对求值顺序做出任何保证(不像 C++ 等提供 short-circuit 求值的语言)。在计算 left-side 之前,引擎可以自由计算 AND 的 right-side。您可以 use IF(cond,then-clause,else-clause)
强制执行特定的评估顺序。
以这种方式重写,您的查询将是:
SELECT * FROM Concerts
WHERE IF(ARRAY_LENGTH(TicketPrices) > 0, TicketPrices[OFFSET(0)] IS NOT NULL, FALSE);
我有以下查询:
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.
为什么在第一部分不正确的情况下评估第二部分?如何检查数组是否有一个具有特定值的元素?
一般来说,SQL 不对求值顺序做出任何保证(不像 C++ 等提供 short-circuit 求值的语言)。在计算 left-side 之前,引擎可以自由计算 AND 的 right-side。您可以 use IF(cond,then-clause,else-clause)
强制执行特定的评估顺序。
以这种方式重写,您的查询将是:
SELECT * FROM Concerts
WHERE IF(ARRAY_LENGTH(TicketPrices) > 0, TicketPrices[OFFSET(0)] IS NOT NULL, FALSE);