【问题标题】:SQL to reverse the path (eg. abc/def/ghi to ghi/def/abc)SQL 来反转路径(例如 abc/def/ghi 到 ghi/def/abc)
【发布时间】:2014-08-11 13:58:28
【问题描述】:

我试图弄清楚如何反转结果的路径。假设结果路径是 abc/def/ghi ,所以我需要反转它,所以结果被读取为“ghi/def/abc”。

我已经搜索过这个,Vincent (Reverse in Oracle this path z/y/x to x/y/z) 提供了一个解决方案。

但是,当我尝试执行相同操作时,我收到错误“参数 '0' 超出范围”。

以下是我所做的:

    SQL> variable path varchar2(4000); SQL> exec :path := 'a/b/c/def';

    PL/SQL procedure successfully completed
    path

    a/b/c/def

    SQL> SELECT regexp_substr(:path, '[^/]+', 1, ROWNUM) sub_path, ROWNUM rk 2 from dual 3 CONNECT BY LEVEL <= length(regexp_replace(:path, '[^/]', '')) + 1;

    SUB_PATH RK

    a 1 b 2 c 3 def 4
    path

a/b/c/def

    SQL> SELECT MAX(sys_connect_by_path(sub_path, '/')) reversed_path 2 FROM (SELECT regexp_substr(:path, '[^/]+', 1, ROWNUM) sub_path, 3 ROWNUM rk 4 FROM dual 5 CONNECT BY LEVEL <= length(regexp_replace(:path, '[^/]', '')) + 1) 6 CONNECT BY PRIOR rk = rk + 1 7 START WITH rk = length(regexp_replace(:path, '[^/]', '')) + 1;

    ORA-01428: argument '0' is out of range
    path

a/b/c/def

我试过了,但很难找出这个错误的原因。一旦我能够理解,也许我可以将它用于我的查询以生成反向路径。仅供参考,REVERSE 函数不起作用,因为它只会反转不是所需结果的字符。

非常感谢任何帮助或提示。非常感谢!!

【问题讨论】:

标签: oracle reverse


【解决方案1】:

@user3761113

试试这个查询,

SELECT REGEXP_SUBSTR(PATH,'[^/]+',1,4) || '/' || REGEXP_SUBSTR(PATH,'[^/]+',1,3) || '/' || REGEXP_SUBSTR(PATH,'[^/]+',1,2) || '/' || REGEXP_SUBSTR(PATH,'[^/]+',1,1) "Reverse of Path" 
  FROM (SELECT 'a/bc/def/ghij' PATH FROM DUAL);

我猜这样就可以了 :-)

【讨论】:

    【解决方案2】:

    @Joe 非常感谢!! 尽管我无法找出解决方案,但 SQL Fiddle 帮助我找到了答案,但下面的查询提供了我需要的结果。

    SELECT MAX(sys_connect_by_path(sub_path, '/')) reversed_path 
    FROM 
    (SELECT regexp_substr(:path, '[^/]+', 1, ROWNUM) sub_path,  
    ROWNUM rk  FROM duh  
    CONNECT BY LEVEL <= length(regexp_replace(:path, '[^/]', '')) + 1) 
    CONNECT BY PRIOR rk = rk + 1 
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2011-10-31
      • 2013-06-05
      • 2018-10-29
      相关资源
      最近更新 更多