1
我正在尝试使用Google Big Query查找字符串中子字符串第二次出现的索引。Google Big Query中的第二个子字符串
例如,在字符串“challcha”,“CH”的第二occurence将是在6位
我明白,这可以在使用的Oracle CHARINDEX来实现。我正试图在Google Big Query中实现这一点。
任何帮助表示赞赏!
我正在尝试使用Google Big Query查找字符串中子字符串第二次出现的索引。Google Big Query中的第二个子字符串
例如,在字符串“challcha”,“CH”的第二occurence将是在6位
我明白,这可以在使用的Oracle CHARINDEX来实现。我正试图在Google Big Query中实现这一点。
任何帮助表示赞赏!
对于BigQuery的纯SQL String functions
SELECT test,
INSTR(test, 'ch') + 1 + INSTR(SUBSTR(test, INSTR(test, 'ch') + 2), 'ch') AS pos,
FROM
(SELECT 'challcha' AS test),
(SELECT 'chcha' AS test),
(SELECT 'chha' AS test)
WHERE
INSTR(SUBSTR(test, INSTR(test, 'ch') + 2), 'ch') > 0
注:INSTR是区分大小写的,所以你可能希望把所有的下限或上限,如果您有混合的情况下
SELECT test, pos FROM JS(
(
SELECT test FROM
(SELECT 'challcha' AS test),
(SELECT 'chcha' AS test),
(SELECT 'chha' AS test)
) ,
test,
"[{name: 'test', type:'string'},
{name: 'pos', type:'integer'}
]
",
"function(r, emit) {
var search = 'ch';
var pos1 = r.test.indexOf(search) + 1;
var pos2 = r.test.indexOf(search, pos1) + 1;
if (pos1 * pos2 == 0) pos2 = 0
emit({test: r.test, pos: pos2});
}"
)
纯的BigQuery Regular expression functions
SELECT test,
LENGTH(REGEXP_EXTRACT(test, r'(?i)(.*?)ch')) + 3 +
LENGTH(REGEXP_EXTRACT(REGEXP_EXTRACT(test, r'(?i)ch(.*)'), r'(?i)(.*?)ch')) AS len,
FROM
(SELECT 'ChallCha' AS test),
(SELECT 'abChallCha' AS test),
(SELECT 'chcha' AS test),
(SELECT 'chha' AS test)
哇感谢,帮了我很多! – user3447653
如果答案帮助您解决了问题并且您接受了答案,那么您还应该考虑对其进行投票。有关http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235中的http://stackoverflow.com/help/someone-answers和Upvote部分的详情,请参阅 –