PL/SQL取字符串子串位置的算法。

有个字符串:‘ljdkj1231,123,flskdf,dfjalskdfja,12e,’。
需求:挨个找到‘,’在该字符串所在的位置,并输出,PL/SQL,谢谢。

我要说一句,连PL/SQL都不知道的也能给推荐?
请推荐的人不要只为了完成任务而推荐,为网友,为知道负点责好吗?
如果是C#,直接split+length就可以得到结果,人家要的是PL/SQL.

PL/SQL是Oracle数据库对SQL语句的扩展, Oracle中有Instr函数,可以找到某个字符串在某个表达式中的位置,但是只是第一次出现的位置,如果想找出所有的位置,只能写个函数了。

下面是我写的函数:
CREATE OR REPLACE FUNCTION GetCharNumbers (pStr IN VARCHAR2, pSplit IN VARCHAR2) RETURN VARCHAR2 IS
vTempStr VARCHAR2(200);
vReturnStr VARCHAR2(200);
vPost NUMBER;
vTotal NUMBER;
BEGIN
vPost := 0;
vTotal := 0;
vTempStr := pStr;
vReturnStr := null;
WHILE INSTR(vTempStr, pSplit) > 0 LOOP
vPost := INSTR(vTempStr, pSplit);
vTotal := vTotal + vPost;
IF vReturnStr IS NOT NULL THEN
vReturnStr := vReturnStr || ', ';
END IF;
vReturnStr := vReturnStr || TO_CHAR(vTotal);
vTempStr := SUBSTR(vTempStr,vPost+1);
END LOOP;
RETURN vReturnStr;
END;

用法 select GetCharNumbers('ljdkj1231,123,flskdf,dfjalskdfja,12e',',') from dual
反回结果:
10, 14, 21, 33
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-09
pl是什么?用C#很容易的啊
用“,”分成一个数组,然后计算数组中每个值的长度,然后用角标标示是第几个“,”符号,第一个就用第一个长度标示,第二个就用第二个长度和它前面所有的长度的和,第三个依次类推就行了。
第2个回答  2010-12-09
select substr('字符串',length('字符串')-1,1) from dual

select substr(字段名,length(字段名)-1,1) from 表名