Sql Teradata选择失败:[2663]子字符串:字符串下标超出范围
下面是一段失败的代码Sql Teradata选择失败:[2663]子字符串:字符串下标超出范围,sql,teradata,teradata-sql-assistant,Sql,Teradata,Teradata Sql Assistant,下面是一段失败的代码 ,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(P
,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部分存在问题
包含“,”的人名运行正常。请您指导我如何框显查询以避免此错误。可能有些人名没有逗号。我认为最简单的方法是只添加一个:
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))
不需要嵌套函数或添加逗号或大小写…对于不包含逗号的名称,您想做什么?您可以将其保留为空,因为对于名字,如果人名不是个人,我们已经选择了公司全名。选择人名,SUBSTR(PERSON\u DIM.PERSON\u name,INDEX(PERSON\u DIM.PERSON\u name,,)+1,长度(人名)从NDW_共享的视图。PERSON_DIM,其中PERSON_名称不象“,%”;输出:Makotek LLC Makotek LLC非付费断开连接Vitel Communications LLC Vitel Communications LLC Laguna、Michel Michel Kelly、Shawn Michael Shawn Michael Behinan、Arsene Quentin Dieudonne Arsene Quentin Dieudonne Brookins、Lauraped包含示例数据和查询是您的问题。注释不容易阅读
COALESCE(SAP.LAST_NAME, StrTok(PERSON_DIM.PERSON_NAME,',',1))