Teradata SELECT失败:[2663] SUBSTR:字符串下标超出范围

问题描述 投票:0回答:2

我有下面一段失败的代码。

,COALESCE(SAP.LAST_NAME, SUBSTR(PERSON_DIM.PERSON_NAME, 1,INDEX(PERSON_DIM.PERSON_NAME,',' )-1)) AS Lastname

Error: SELECT Failed: [2663] SUBSTR: string subscript out of bounds in PERSON_NAME

我调试并发现问题在于SUBSTR(PERSON_DIM.PERSON_NAME,1,INDEX(PERSON_DIM.PERSON_NAME,',')-1部分。

 SEL PERSON_NAME,INDEX(PERSON_NAME,',' )-1 FROM NDW_SHARED_PII_VIEWS.PERSON_DIM WHERE PERSON_NAME NOT LIKE '%,%';--Giving us results
 output:
 Star Installations Inc -1
 Unassigned -1
 Cable Services Company Inc.    -1

 SEL SUBSTR(PERSON_NAME, 1,INDEX(PERSON_NAME,',' )-1) FROM NDW_SHARED_PII_VIEWS.PERSON_DIM WHERE PERSON_NAME NOT LIKE '%,%';--Failing

 Above query eventually becomes like below which is causing confusion i believe. 

 SEL SUBSTR(PERSON_NAME, 1,-1) FROM NDW_SHARED_PII_VIEWS.PERSON_DIM WHERE PERSON_NAME NOT LIKE '%,%';

包含','的PERSON_NAME运行正常。您能指导我如何构建查询框架以避免此错误。

sql teradata teradata-sql-assistant
2个回答
1
投票
大概有些名字没有逗号。我认为最简单的方法是只添加一个:

COALESCE(SAP.LAST_NAME, SUBSTR(PERSON_DIM.PERSON_NAME, 1, INDEX(PERSON_DIM.PERSON_NAME || ',', ',' ) - 1 ) ) AS Lastname


0
投票
感谢您的回答。

我已经在下面尝试过,并且效果很好。

COALESCE(SAP.LAST_NAME, CASE WHEN PERSON_DIM.PERSON_NAME NOT LIKE '%,%' THEN PERSON_DIM.PERSON_NAME ELSE SUBSTR(PERSON_DIM.PERSON_NAME,1,INDEX(PERSON_DIM.PERSON_NAME,',' )-1) END) AS LASTNAME

© www.soinside.com 2019 - 2024. All rights reserved.