在Bigquery中查找另一个字符串中一个字符串的位置

时间:2013-04-23 05:12:31

标签: google-bigquery

我在BigQuery查询引用中找不到一个函数,它在第二个查找一个字符串并返回该位置的索引。像其他SQL方言中的instr()之类的东西。是否有任何替代品或任何技术来实现这一目标?

例如:在“abcdef”中查看“de”将返回4。

4 个答案:

答案 0 :(得分:5)

一种方法是使用正则表达式提取(see reference here):

SELECT
  title, LENGTH(REGEXP_EXTRACT(title, r'^(.*)def.*')) + 1 AS location_of_fragment
FROM
  [publicdata:samples.wikipedia]
WHERE
  REGEXP_MATCH(title, r'^(.*)def.*')
LIMIT 10;

返回:

Row title   location_of_fragment     
1   Austrian air defense    14   
2   Talk:Interface defeat   16   
3   High-definition television  6    
4   Talk:IAU definition of planet   10   
5   Wikipedia:Articles for deletion/Culture defines politics    41   
6   Wikipedia:WikiProject Spam/LinkReports/defenders.org    40   
7   Adenine phosphoribosyltransferase deficiency    35   
8   Stay-at-home defenceman 14   
9   Manganese deficiency (plant)    11   
10  High-definition television  6   

答案 1 :(得分:2)

现在不建议使用旧答案,并且@carlos答案有效:

STRPOS(string, substring) 

答案 2 :(得分:1)

遗留SQL INSTR(str1,str2)函数"返回第一次出现的字符串的从一开始的索引。"这应该适合你。

https://cloud.google.com/bigquery/docs/reference/legacy-sql

答案 3 :(得分:0)

我迟到了,但 BigQuery API 发生了变化,现在正则表达式语法如下:

SELECT mydomains FROM `myproject.mydataset.mytable`
       where regexp_contains(mydomains, r'^(.*)example.*');

回答问题例如:查看“abcdef”中的“de”将返回4。,它看起来像:

SELECT de FROM `myproject.mydataset.mytable`
       where regexp_contains(de, r'^(.*)abcdef.*');
根据参考链接,

REGEXP_MATCH 现在是Legacy SQL Functions and Operators 的一部分。

希望对大家有所帮助! :)