我有列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中解决这个问题?
答案 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
的长度增加也不会成为问题