使用regex\u contains搜索带撇号(')的值

nzkunb0c  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(288)

简单的问题,但我似乎找不到一个特定于bigquery的答案。。。
我试图从一个表中搜索一个特定的姓氏列表。

DECLARE X ARRAY<STRING>;
SET X = {'ALI', 'BAKER', 'COUSLAND', ... , 'O'NEIL', 'WONG'}

SELECT ID, FIRST_NAME, SURNAME
FROM   TABLE
WHERE  SURNAME IN X

我怎样才能用撇号来寻找价值呢?
谢谢。

dced5bon

dced5bon1#

您可以简单地使用双引号而不是单引号,如下面的示例所示

DECLARE X ARRAY<STRING>;
SET X = ['ALI', 'BAKER', 'COUSLAND', ... , "O'NEIL", 'WONG'];

SELECT ID, FIRST_NAME, SURNAME
FROM   TABLE
WHERE  SURNAME IN UNNEST(X)

显然,您还应该注意脚本中的一些其他更正,即:
用方括号代替花括号设置数组
在where子句中使用unnest
还有一种情况是,如果字符串同时包含双引号和单引号,那么您可以使用三重单引号来转义,比如 ''''xyz"123'''

8yparm6h

8yparm6h2#

撇号可以用反冲(“\”)转义

SET X = {'ALI', 'BAKER', 'COUSLAND', ... , 'O\'NEIL', 'WONG'};
esyap4oy

esyap4oy3#

正确定义值:

DECLARE X ARRAY<STRING>;
SET X = {'ALI', 'BAKER', 'COUSLAND', ... , 'O''NEIL', 'WONG'};

那你可以用 UNNEST() :

SELECT ID, FIRST_NAME, SURNAME
FROM  TABLE
WHERE SURNAME IN (SELECT el FROM UNNEST(X) el)

相关问题