Teradata子串出界

时间:2016-07-05 17:59:25

标签: sql substring teradata

我在解决子字符串之间的界限时遇到了问题。例如,对于字符串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而错误输出。

1 个答案:

答案 0 :(得分:3)

您可以使用正则表达式,这将提取__与以下_或字符串结尾之间的所有内容:

REGEXP_SUBSTR(col, '(?<=__).+?(?=(_|$))')

'(?&lt; =)'是一个后视,即搜索以前的字符而不将其添加到结果中。在这里:搜索__

'。+'匹配任何字符,一次或多次。这将匹配,直到字符串结束(“贪婪”),'?'(“懒惰”)阻止。

'(?=)'是预测,即搜索以下字符而不将其添加到结果中。

(|)管道在多个备选项中拆分表达式。这里是下划线字符或字符串 $

的结尾