现在的位置: 首页 > 综合 > 正文

ORACLE遍历字符串

2013年10月10日 ⁄ 综合 ⁄ 共 1247字 ⁄ 字号 评论关闭

SQL> select * from t10;

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10

10 rows selected.

SQL> select substr(e.ename,iter.id,1) as C
  2  from
  3  (select ename from emp where ename='KING') e,
  4  (select id from t10) iter
  5  where iter.id<=length(e.ename);

C
---
K
I
N
G

 

t10表只是个辅助表而已,书上称之为“基干表”。在这里有一点需要注意的就是这里的字符串'KING'长度是小于10的,所以在这里使用t10可以实现我们的需求。假若字符串长度大于10,那么就不行了。

所以我们应该保证基干表中的行数要大于字符串的长度才行。

 

把前面那个查询分拆一下,有益于理解这个语句实现的过程。

SQL> select e.ename,iter.id
  2  from
  3  (select ename from emp where ename='KING') e,
  4  (select id from t10) iter
  5  ;

ENAME              ID
---------- ----------
KING                1
KING                2
KING                3
KING                4
KING                5
KING                6
KING                7
KING                8
KING                9
KING               10

10 rows selected.

这里通过两个子查询做了一个笛卡尔积,1*10=10,所以有10条记录。

SQL> select e.ename,iter.id
  2  from
  3  (select ename from emp where ename='KING') e,
  4  (select id from t10) iter
  5  where iter.id<=length(e.ename);

ENAME              ID
---------- ----------
KING                1
KING                2
KING                3
KING                4

通过一个where条件iter.id<=length(e.ename),来控制返回的行数与字符串长度相等。

 

接着再使用substr函数,就可以通过使用ENAME作为源字符串,ID作为截取字符串的起始位置,1为截取长度,来达到目的了。

抱歉!评论已关闭.