我在计算子字符串之间的界限时遇到了问题。例如,对于字符串063016_shape_tea_cleanse__emshptea1_,我希望将其子串出emshptea1,但它也必须用于字符串063016_shape_tea_cleanse__emshptea1_TESTDATA_HERE。
目前我有:
sel SUBSTR('063016_shape_tea_cleanse__emshptea1_',POSITION('__' IN '063016_shape_tea_cleanse__emshptea1_')+2,
POSITION('_' IN SUBSTR('063016_shape_tea_cleanse__emshptea1_',POSITION('__' IN '063016_shape_tea_cleanse__emshptea1_') + 2,CHARACTER_LENGTH('063016_shape_tea_cleanse__emshptea1_') - (POSITION('__' IN '063016_shape_tea_cleanse__emshptea1_') + 2)))-1)但这是错误的,因为它试图将27到-1进行子字符串。
发布于 2016-07-05 19:01:19
您可以使用正则表达式,这将提取__与以下_或字符串末尾之间的所有内容:
REGEXP_SUBSTR(col, '(?<=__).+?(?=(_|$))')'(?<= )'是一个回顾,即搜索以前的字符而不将其添加到结果中。这里:搜索__
'.+'匹配任何字符,一次或多次。这将匹配到字符串的末尾(“贪婪”),'?' (“懒惰”)会阻止这一点。
'(?= )'是前瞻性的,即搜索以下字符而不将其添加到结果中。
管道在多个选项中拆分一个表达式。这里不是下划线字符就是字符串$的结尾
https://stackoverflow.com/questions/38209763
复制相似问题