首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PL/SQL上显示添加连字符的字符串

如何在PL/SQL上显示添加连字符的字符串
EN

Stack Overflow用户
提问于 2022-05-09 09:22:52
回答 2查看 119关注 0票数 -1

如何显示字符串,用for循环用破折号分隔每个字母?

例如,我想显示:

h-e-l-l-o-w-o-r-l-d

我试过使用substr函数,但我无法把它拿出来

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-09 09:29:47

如果它必须是PL/SQL和FOR循环,那么可以

代码语言:javascript
运行
复制
SQL> set serveroutput on
SQL> declare
  2    l_str  varchar2(20) := 'helloworld';
  3    retval varchar2(50);
  4  begin
  5    for i in 1 .. length(l_str) loop
  6      retval := retval || substr(l_str, i, 1) ||'-';
  7    end loop;
  8    retval := rtrim(retval, '-');
  9    dbms_output.put_line(retval);
 10  end;
 11  /
h-e-l-l-o-w-o-r-l-d

PL/SQL procedure successfully completed.

SQL>

否则,考虑一下。

代码语言:javascript
运行
复制
SQL> select rtrim(regexp_replace('helloworld', '(.)', '\1-'), '-') result from dual;

RESULT
-------------------
h-e-l-l-o-w-o-r-l-d

SQL>

代码语言:javascript
运行
复制
SQL> select listagg(substr('helloworld', level, 1), '-') within group (order by level) result
  2  from dual
  3  connect by level <= length('helloworld');

RESULT
--------------------------------------------------------------------------------
h-e-l-l-o-w-o-r-l-d

SQL>
票数 1
EN

Stack Overflow用户

发布于 2022-05-09 09:48:54

您只需输出每个连续字符,并且在第一个字符之后,在它们之间输出一个连字符:

代码语言:javascript
运行
复制
DECLARE
  string VARCHAR2(20) := 'helloworld';
BEGIN
  DBMS_OUTPUT.PUT(SUBSTR(string, 1, 1));
  FOR i IN 2 .. LENGTH(string)
  LOOP
    DBMS_OUTPUT.PUT('-');
    DBMS_OUTPUT.PUT(SUBSTR(string, i, 1));
  END LOOP;
  DBMS_OUTPUT.NEW_LINE();
END;
/

其中产出:

h-e-l-l-o-w-o-r-l-d

如果您想不使用循环,那么可以使用:

代码语言:javascript
运行
复制
DECLARE
  string VARCHAR2(20) := 'helloworld';
BEGIN
  DBMS_OUTPUT.PUT_LINE( SUBSTR(REGEXP_REPLACE(string, '(.)', '-\1'), 2) );
END;
/

您不应该使用LTRIM (或RTRIM)删除连字符,因为如果输入字符串有前导(或尾随)连字符,那么这些字符将从输出中删除,这将是错误的。

例如:

代码语言:javascript
运行
复制
DECLARE
  string VARCHAR2(20) := '--helloworld--';
BEGIN
  DBMS_OUTPUT.PUT_LINE('Correct:');
  DBMS_OUTPUT.PUT_LINE(SUBSTR(REGEXP_REPLACE(string, '(.)', '-\1'), 2));
  DBMS_OUTPUT.PUT_LINE('Incorrect:');
  DBMS_OUTPUT.PUT_LINE(LTRIM(REGEXP_REPLACE(string, '(.)', '-\1'), '-'));
END;
/

产出:

正确:

db<>fiddle https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=585e8b56326c22e12daf085f76d35119

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72169671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档