在Bigquery中,我试图找到一种方法,根据字符串前面的破折号来提取特定的字符串段。字符串中的总破折号数将始终相同。例如,我可以在以下字符串中查找第二个破折号之后和第三个破折号之前的字符串:
abc-defgh-hij-kl-mnop目前,我使用下面的regex提取,它从后面计数破折号:
([^-]+)(?:-[^-]+){2}$问题是,如果在破折号之间没有任何东西,正则表达式就不能工作。例如,这样的内容返回null
abc-defgh-hij--mnop是否有一种方法可以使用regex在一定数量的破折号之后提取字符串并在随后的破折号之前将其切断?
谢谢!
发布于 2019-12-10 20:01:18
下面是用于BigQuery标准SQL的
在您的情况下,最简单的方法是使用拆分和偏移,如下例所示
SELECT SPLIT(str, '-')[OFFSET(3)] 上面将返回abc-defgh-hij--mnop的空字符串
若要防止调用不存在的元素时发生错误,最好使用SAFE_OFFSET。
SELECT SPLIT(str, '-')[SAFE_OFFSET(3)] https://stackoverflow.com/questions/59274454
复制相似问题