我在 BigQuery 查询参考中找不到一个函数,该函数在第二个字符串中查找一个字符串并返回该位置的索引。类似于其他 SQL 方言中的 instr() 。是否有任何替代品或任何技术来实现这一目标?
例如:在“abcdef”中查看“de”将返回 4。
我在 BigQuery 查询参考中找不到一个函数,该函数在第二个字符串中查找一个字符串并返回该位置的索引。类似于其他 SQL 方言中的 instr() 。是否有任何替代品或任何技术来实现这一目标?
例如:在“abcdef”中查看“de”将返回 4。
一种方法是使用正则表达式提取(请参阅此处的参考资料):
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
旧答案现已弃用,@carlos 答案有效:
STRPOS(string, substring)
旧版 SQL INSTR(str1,str2) 函数“返回字符串第一次出现的从 1 开始的索引。” 所以这应该对你有用。
我迟到了,但 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 现在是旧版 SQL 函数和运算符的一部分。
希望它可以帮助一个!:)