【问题标题】:Oracle PL/SQL - Remove Last Instance of a specific CharacterOracle PL/SQL - 删除特定字符的最后一个实例
【发布时间】:2011-04-06 16:11:04
【问题描述】:

enter code here我正在构建一组函数,它们根据参数和内部选择返回一个 json 字符串。

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

它可以正确解析,但 json 的 html eval 由于那个额外的逗号而失败。是否可以在 pl/sql.xml 中删除特定字符(比如字符串中的最后一个逗号)。我查看了 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 一起使用时可以正确评估。

【问题讨论】:

    标签: json string plsql


    【解决方案1】:

    rtrim 函数更容易使用。所以在循环之后:

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

    然后要终止 JSON,在同一语句中添加右大括号:

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

    【讨论】:

      【解决方案2】:

      您可以使用 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;
      

      【讨论】:

        【解决方案3】:

        Tobi,我也遇到过类似的情况,但请记住,使用 RTRIM 它会删除您在函数中指定的值的所有实例。

        例如:

        我想从列选择的末尾修剪“X”。 (仅最后一个实例)

        列值 = 'SOMEVALUEXX'

        现在 RTrim 将返回:'SOMEVALUE'

        您可能在追求 = 'SOMEVALUEX'

        Chandu的回答是正确的。

        始终检查您的业务流程。

        【讨论】:

        • Aashish,这会更好地表达为对 Tobi 回答的评论。在您有足够的reputation to comment 之前,请尝试提供直接回答问题的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多