我在BigQuery查询引用中找不到一个函数,它在第二个查找一个字符串并返回该位置的索引。像其他SQL方言中的instr()之类的东西。是否有任何替代品或任何技术来实现这一目标?
例如:在“abcdef”中查看“de”将返回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)函数"返回第一次出现的字符串的从一开始的索引。"这应该适合你。
答案 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 的一部分。
希望对大家有所帮助! :)