oracle - pl sql 尝试创建字符串算法

标签 oracle algorithm plsql

我正在尝试制定一个(对我来说)困难的字符串算法。

以下是该算法的屏幕截图: enter image description here

所以这一切都以一个数字开始(长度可以是可变的&&是varchar)。

步骤是:

  1. 将数字分成 4 组(最后一组可以少于 4)
  2. 颠倒组顺序
  3. 删除空格

经过几个小时的努力,我到目前为止只能将数字分成几组。

DECLARE
    text    VARCHAR2(50);
    newText VARCHAR2(50);
BEGIN
    text := '3536 2029 2712 3456 789';
    FOR i IN 0..LENGTH(text) LOOP
        IF MOD(i, 4) = 0 THEN
            newText := newText || ' ' || SUBSTR(text, i, 1);
        ELSE
            newText := newText || SUBSTR(text, i, 1);
        END IF;
    END LOOP;
    dbms_output.put_line(newText);
END;
/
Output: 3353 6202 9271 2345 6789

我在过去几个小时里尝试过的是;我首先认为最简单的方法应该是将长文本分成几组并将它们添加到一个数组中,然后简单地反转数组。老实说,这对我来说根本不起作用(甚至没有接近)。因此我想出了这个。

你能帮我吗?抱歉,我是新手,今天开始在 plsqy 上。 如果我可以提供一些额外的信息,我很高兴您也发布此信息。

附注

我什至不需要确切的代码示例。一些指导性的帮助将会有很大的帮助。

问候

最佳答案

不需要时不必费心处理过程代码,您可以使用简单的 SQL 查询进行相同的转换:

SELECT
    LISTAGG(GRP) WITHIN GROUP (ORDER BY RN DESC) RESULT
FROM (
    SELECT
        SUBSTR(VALUE, (LEVEL - 1) * 4 + 1, 4) GRP,
        ROWNUM RN
    FROM
        (SELECT '3536202927123456789' VALUE FROM DUAL)
    CONNECT BY
        SUBSTR(VALUE, (LEVEL - 1) * 4 + 1) IS NOT NULL
    )

PL/SQL:

DECLARE
    text    VARCHAR2(50);
    newText VARCHAR2(50);
BEGIN
    text := '3536202927123456789';
    FOR i IN 0..TRUNC(LENGTH(text) / 4) LOOP
        newText := SUBSTR(text, i * 4 + 1, 4) || newText;
    END LOOP;
    dbms_output.put_line(newText);
END;

DECLARE
    text    VARCHAR2(50) := 3536202927123456789;
    newText VARCHAR2(50);
BEGIN
    SELECT
        LISTAGG(GRP) WITHIN GROUP (ORDER BY RN DESC) INTO newText
    FROM (
        SELECT
            SUBSTR(VALUE, (LEVEL - 1) * 4 + 1, 4) GRP,
            ROWNUM RN
        FROM
            (SELECT text VALUE FROM DUAL)
        CONNECT BY
            SUBSTR(VALUE, (LEVEL - 1) * 4 + 1) IS NOT NULL
        );

    dbms_output.put_line(newText);
END;

关于oracle - pl sql 尝试创建字符串算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838397/

相关文章:

sql - 为什么 Oracle 认为这个查询格式错误?

c - 高级语言来为您的程序制作原型(prototype)?

sql - 如何在 Oracle 的循环中重复 Select 语句?

sql - 如何修复错误 "Catastrophic failure. Cannot fetch a row from OLE DB provider "OraOLEDB.Oracle“for linked server”

sql - 是否有一种好的 SQL 方法来汇总以日期范围 block 作为输入的表?

sql - oracle中如何添加长度为5000的列

algorithm - 被3整除

c++ - x = malloc(n * sizeof (int));无法将 void 转换为 int

oracle - SQL*Plus 禁用或跳过接受提示

oracle - 计算在特定时间范围内运行的实例数