Teradata Substr:字符串越界错误
我为下面的substr获取字符串越界错误。我怎样才能克服这一点Teradata Substr:字符串越界错误,teradata,Teradata,我为下面的substr获取字符串越界错误。我怎样才能克服这一点 SEL DRAWING_NUMBER ,CASE WHEN SUBSTR(DRAWING_NUMBER,1,1) ='Y' THEN SUBSTR(DRAWING_NUMBER ,1,(INDEX(DRAWING_NUMBER , '.')-1)) ELSE DRAWING_NUMBER END AS DERIVED_DRAWING FROM GEEDW_D_PLP_BULK_
SEL DRAWING_NUMBER
,CASE
WHEN SUBSTR(DRAWING_NUMBER,1,1) ='Y' THEN SUBSTR(DRAWING_NUMBER ,1,(INDEX(DRAWING_NUMBER , '.')-1))
ELSE DRAWING_NUMBER
END AS DERIVED_DRAWING
FROM GEEDW_D_PLP_BULK_V.CDR_DOCUMENTUM_TRSMTL
最有可能的是,以“Y”开头的
图纸编号的某些值不包含“.”字符。
在这些情况下,索引(图纸编号“.”)
将返回0。在这种情况下,您的SUBSTR(图纸编号,1,(索引(图纸编号,)-1)
将计算为SUBSTR(图纸编号,1,-1)
,这超出了SUBSTR函数的定义范围。
您可能正试图实现的目标是:
SEL
DRAWING_NUMBER
,CASE
WHEN (SUBSTR(DRAWING_NUMBER, 1, 1) ='Y') AND (INDEX(DRAWING_NUMBER , '.') > 0)
THEN SUBSTR(DRAWING_NUMBER, 1, (INDEX(DRAWING_NUMBER , '.') - 1))
ELSE DRAWING_NUMBER
END AS DERIVED_DRAWING
FROM GEEDW_D_PLP_BULK_V.CDR_DOCUMENTUM_TRSMTL;
您可以改用LIKE来重写:
CASE WHEN DRAWING_NUMBER LIKE 'Y%.%'
THEN SUBSTR(DRAWING_NUMBER ,1,(INDEX(DRAWING_NUMBER , '.')-1))
ELSE DRAWING_NUMBER
END
您也可以切换到标准SQL:
CASE WHEN DRAWING_NUMBER LIKE 'Y%.%'
THEN SUBSTRING(DRAWING_NUMBER FROM 1 FOR POSITION('.' IN DRAWING_NUMBER) -1)
ELSE DRAWING_NUMBER
END
您好,Igor,谢谢您的回复。是的,您是对的,在绘图编号中有带“否”的值。谢谢您,dnoeth…有带“否”的值。在绘图编号中,这就是它生成越界错误的原因。想知道一件事…我们如何获得字符的第二次出现。我们在teradata中没有INSTR,我尝试了using INDEX和Substring,它工作了,但太复杂了。我在某处看到了你的帖子,你建议使用UDF。我如何才能工作,在哪里可以找到它?@user3901666:TD14之前,你可以安装在上找到的Oracle UDF,但这已经过时,最好向TD支持部门咨询最新版本。