PL/SQL取字符串子串位置的算法。
发布网友
发布时间:2022-04-10 02:37
我来回答
共3个回答
热心网友
时间:2022-04-10 04:06
我要说一句,连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 al
反回结果:
10, 14, 21, 33
热心网友
时间:2022-04-10 05:24
pl是什么?用C#很容易的啊
用“,”分成一个数组,然后计算数组中每个值的长度,然后用角标标示是第几个“,”符号,第一个就用第一个长度标示,第二个就用第二个长度和它前面所有的长度的和,第三个依次类推就行了。
热心网友
时间:2022-04-10 06:59
select substr('字符串',length('字符串')-1,1) from al
或
select substr(字段名,length(字段名)-1,1) from 表名