Teradata SELECT 失败:[2663] SUBSTR:字符串下标越界
Teradata SELECT Failed: [2663] SUBSTR: string subscript out of bounds
我有下面一段代码失败了。
,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 运行 没问题。你能指导我如何构建查询以避免这个错误吗?
据推测,有些名字没有逗号。我认为最简单的方法是只加一个:
COALESCE(SAP.LAST_NAME,
SUBSTR(PERSON_DIM.PERSON_NAME, 1, INDEX(PERSON_DIM.PERSON_NAME || ',', ',' ) - 1
)
) AS Lastname
感谢您的回答。
我已经在下面尝试过,效果也很好。
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
最短路线利用STRTOK
:
COALESCE(SAP.LAST_NAME, StrTok(PERSON_DIM.PERSON_NAME,',',1))
无需嵌套函数或添加逗号或 CASE ...
我有下面一段代码失败了。
,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 运行 没问题。你能指导我如何构建查询以避免这个错误吗?
据推测,有些名字没有逗号。我认为最简单的方法是只加一个:
COALESCE(SAP.LAST_NAME,
SUBSTR(PERSON_DIM.PERSON_NAME, 1, INDEX(PERSON_DIM.PERSON_NAME || ',', ',' ) - 1
)
) AS Lastname
感谢您的回答。
我已经在下面尝试过,效果也很好。
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
最短路线利用STRTOK
:
COALESCE(SAP.LAST_NAME, StrTok(PERSON_DIM.PERSON_NAME,',',1))
无需嵌套函数或添加逗号或 CASE ...