gpt4 book ai didi

oracle - pl sql 试图创建一个字符串算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:00 25 4
gpt4 key购买 nike

我正在尝试制作一个(对我而言)困难的字符串算法。

这是算法必须如何运行的屏幕截图: 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com