2016-04-21 53 views
1

我正在尝试使用Google Big Query查找字符串中子字符串第二次出现的索引。Google Big Query中的第二个子字符串

例如,在字符串“challcha”,“CH”的第二occurence将是在6位

我明白,这可以在使用的Oracle CHARINDEX来实现。我正试图在Google Big Query中实现这一点。

任何帮助表示赞赏!

回答

3

对于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是区分大小写的,所以你可能希望把所有的下限或上限,如果您有混合的情况下

随着BigQuery User-Defined Functions

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) 
+0

哇感谢,帮了我很多! – user3447653

+0

如果答案帮助您解决了问题并且您接受了答案,那么您还应该考虑对其进行投票。有关http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235中的http://stackoverflow.com/help/someone-answers和Upvote部分的详情,请参阅 –

相关问题