Oracle PL / SQL - 删除特定字符的最后一个实例

时间:2011-04-06 16:11:04

标签: json string plsql

enter code here我正在构建一组基于参数和内部选择返回json字符串的函数。

我遇到的问题是因为我在pl / sql中循环游标,构建json的结构,它在最后一个节点的末尾添加了一个额外的逗号。

它正确解析但是由于额外的逗号,json的html eval失败了。是否可以删除pl / sql中的特定字符(比如字符串中的最后一个逗号)。我查看了REPLACE,但是我找不到使用REPLACE和特定字符实例的文档。

循环看起来像:

FOR appGroup IN appGroups
LOOP

tsResults := tsResults || ' "Group" : { ';
tsResults := tsResults || ' "Id" : "' || appGroup.group_id || '", ';
tsResults := tsResults || '"Name" : "' || appGroupd.display_name || '" ';
tsResults := tsResults || ' }, ';

END LOOP;

这是最后一行中最后一个逗号给我带来悲伤的逗号。

有没有办法杀死最后一个没有抓取它之前的所有字符串字符,以及它之后的所有字符并将它们组合在一起?

关于如何解决这个问题的任何建议都将非常感激。

更新

使用Cyber​​nate的答案我能够进行一些更改以使其正常工作......最初是在END LOOP之后立即进行的;我有额外的代码在结果字符串中添加更多:

tsResults := tsResults ||  '}] }';

正确终止了我正在处理的群组数组......

我在该行之前放置了以下代码:

tiLastComma := INSTR(tsResults, ',', -1);
tsResults := SUBSTR(tsResults, 1, tiLastComma - 1);

现在json正确终止,并且在与jquery一起使用时可以正确判断。

3 个答案:

答案 0 :(得分:6)

您可以使用INSTR函数查找“,”的最后一次出现的位置,然后使用SUBSTRING。

 SELECT SUBSTR(tsResults , 1, INSTR(tsResults , ',', -1)-1)
    INTO tsResults 
    FROM dual;

如果您认为正则表达式不适用于此,请在PL / SQL中使用此语句:

 SELECT REGEXP_REPLACE(tsResults , '\s*,\s*$', '') 
    INTO tsResults 
    FROM dual;

答案 1 :(得分:4)

更容易使用rtrim功能。所以在循环之后:

tsResults := rtrim( tsResults, ',' );

然后要终止JSON,请在同一语句中添加结束花括号:

tsResults := rtrim( tsResults, ',' ) || '}';

答案 2 :(得分:0)

Tobi,我有类似的情况,但请记住使用RTRIM它会删除你在函数中规定的值的所有实例。

例如:

我想从列选择的末尾修剪'X'。 (仅限最后一次)

列值='SOMEVALUEXX'

现在RTrim将返回:'SOMEVALUE'

你有可能在='SOMEVALUEX'

之后

Chandu的回答是正确的。

始终检查您的业务流程。