【问题标题】:What is the best way to replicate the STUFF() function from T-SQL in PL/SQL?在 PL/SQL 中从 T-SQL 复制 STUFF() 函数的最佳方法是什么?
【发布时间】:2021-12-16 11:50:44
【问题描述】:

我正在尝试从 Oracle 中的 Transact SQL 复制 STUFF() 函数的行为。我假设CONCATSUBSTR 函数都会参与其中,但如果不编写太多代码,我想不出一个聪明的方法。

有谁知道实现这一目标的好方法吗?

【问题讨论】:

    标签: sql oracle tsql plsql stuff


    【解决方案1】:

    正如你所说,由于没有这样的内置函数 - 你必须自己编写一个,使用连接和substr 函数。像这样的:

    SQL> create or replace function stuff
      2    (par_str in varchar2,
      3     par_start in number,
      4     par_length in number,
      5     par_replace_with in varchar2
      6    )
      7    return varchar2
      8  is
      9  begin
     10    return substr(par_str, 1, par_start - 1) ||
     11           par_replace_with ||
     12           substr(par_str, par_start + par_length);
     13  end stuff;
     14  /
    
    Function created.
    
    SQL> select stuff('abcdef', 2, 3, 'ijklmn') result from dual;
    
    RESULT
    --------------------------------------------------------------------------------
    aijklmnef
    
    SQL>
    

    (使用STUFF T-SQL文档模拟)

    【讨论】:

    • 这需要更多的工作,以涵盖文档“备注”段落中的特殊情况。例如:如果起始位置大于第一个字符串的长度,则 STUFF() 返回 null。你的解决方案没有。如果 "length" 参数为负数或 0,则相同。如果要删除的长度比第一个字符串长,则必须将第一个字符串删除到第一个字符。您的解决方案没有这样做。
    • 当然,@mathguy。这是所有最小值中的最小值。 OP 可以免费改进。
    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 2019-06-19
    • 2012-08-16
    • 2011-07-22
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多