SQL选择根据列长度获取特定数据

时间:2016-07-20 04:26:29

标签: sql

我有列COACODE存储数据

ID      COACODE
----------------
1       102000

2       1310104

我们可以看到这里第一条记录有6位数,第二条记录有7位数 现在我想将COACODE分成3部分

如果COACODE = 6位数长度 执行此选择;

select SUBSTR(COACODE, 1, 3) as ENTITY_CODE,SUBSTR(COACODE, 4, 2)as BRANCH_CODE ,SUBSTR(COACODE, 6, 1)as  DG_CODE,C.ARABDESC
FROM COACODES c
where CODETYPE=14;

如果COACODE = 7位数长度 执行此选择;

select SUBSTR(COACODE, 1, 3) as ENTITY_CODE,SUBSTR(COACODE, 4, 2)as BRANCH_CODE ,SUBSTR(COACODE, 6, 2)as  DG_CODE,C.ARABDESC
FROM COACODES c
where CODETYPE=14;

那么,我如何在SQL中解决这个问题?

2 个答案:

答案 0 :(得分:1)

编辑:我只是检查Oracle。只需使用SUBSTR(COACODE, 6, 2)也可以获得所需的结果。至于第一个字符串,只有6th个字符,它将返回0。对于第二个,它将返回04,这就是你想要的。

因此,根据您的数据库,您可以尝试此操作。

但要回答您的问题,请使用case

select SUBSTR(COACODE, 1, 3) as ENTITY_CODE,
SUBSTR(COACODE, 4, 2)as BRANCH_CODE ,

case when length(COACODE) = 6 
then SUBSTR(COACODE, 6, 1) 
else 
SUBSTR(COACODE, 6, 2)
end as  DG_CODE

FROM COACODES c
where CODETYPE=14;

您也可以只使用substr并在其中使用case,例如

substr(COACODE,6,case when length(COACODE)=6 then 1 else 2 end) 

答案 1 :(得分:1)

select SUBSTR(COACODE, 1, 3) as ENTITY_CODE,SUBSTR(COACODE, 4, 2)as BRANCH_CODE ,
SUBSTR(COACODE, 6, Len(COACODE)-6 )as  DG_CODE,C.ARABDESC 
FROM COACODES c
where CODETYPE=14;

我正在使用SUBSTR(COACODE, 6, Len(COACODE)-6 )所以即使将来如果COACODE的长度增加也不会成为问题