在bigquery中,我想声明一个5位zipcodes的列表,然后在代码其余部分的不同元素中引用该列表。
我试过这样做:
DECLARE monday ARRAY<int>
('98198', '98003', '98023', '98498',
'98499', '98402', '98403', '98405',
'98406', '98407', '98409', '98421',
'98422', '98465', '98466', '98467',
'98070', '98418', '98103', '98107',
'98117', '98110');
SELECT
CASE WHEN SUBSTR(o.shipping_address.zip, 0, 5) IN --ARRAY NAMED MONDAY-- THEN 'Monday' END
但似乎不能让它正常工作。现在,我的代码可以反复声明同一个列表,但我知道必须有一种方法来声明一次,然后在任何地方重复使用声明。
谢谢!
2条答案
按热度按时间uinbv5nw1#
我想你想要
unnest()
:请注意
substr()
开始于1
.当然,如果您想让代码正常工作,应该使用正确的键入:
qgzx9mmu2#
在提供查询之前,我对您的代码有一些考虑。首先,指定一个数组并传递一个字符串元组。其次,我假设您希望传递一个字符串数组,因为您使用了substr()内置方法来接收字符串。最后,据我所知,您将有一个包含星期一邮政编码的静态数组,然后它将用于计算表中每个邮政编码(如果它属于星期一)。
话虽如此,我还是能够在bigquery中使用javascript udf创建一个查询来执行您的目标。下面是standardsql中的查询。
以及输出,
注意,我使用了declare方法并指定了默认数组。然后,在javascript udf中,它接收到monday数组和行的当前值。因此,它使用include()内置js方法检查值是否在monday数组中,如果邮政编码在数组中,则返回true,否则返回false。最后,在最后一个select语句中,case when用于指定monday if true,这意味着数组包含传递的值。