首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 反轉倒置函數:支援分組分隔符的 REVERSE_F 實現

     編輯:Oracle 教學

Oracle 自定義反轉函數 REVERSE_F:支援分隔符分組倒置

內建 REVERSE 僅能整串反轉,無法按分隔符分組反轉(如 a,b,c → c,b,a)。本文提供可直接部署的 REVERSE_F 函數,支援自定義分隔符與分組反轉邏輯。

函數完整代碼

CREATE OR REPLACE FUNCTION REVERSE_F(
  p_str       VARCHAR2,
  p_delimiter VARCHAR2 := ''
) RETURN VARCHAR2 IS
  v_return   VARCHAR2(4000);
  vp_str     VARCHAR2(4000) := p_str;
  v_idx      NUMBER;
  vp_len     NUMBER := LENGTH(p_delimiter);
BEGIN
  IF p_delimiter IS NULL THEN
    SELECT REVERSE(p_str) INTO v_return FROM dual;
  ELSE
    LOOP
      v_idx := INSTR(vp_str, p_delimiter);
      IF v_idx = 0 THEN
        v_return := vp_str || v_return;
        EXIT;
      ELSIF v_idx = 1 THEN
        v_return := SUBSTR(vp_str, 1, vp_len) || v_return;
        vp_str   := SUBSTR(vp_str, vp_len + 1);
      ELSE
        v_return := SUBSTR(vp_str, 1, v_idx - 1) || v_return;
        vp_str   := SUBSTR(vp_str, v_idx);
      END IF;
    END LOOP;
  END IF;
  RETURN v_return;
END REVERSE_F;

使用示例

SELECT REVERSE_F('a,b,c', ',') FROM dual;  -- 返回 'c,b,a'
SELECT REVERSE_F('2023-01-15', '-') FROM dual;  -- 返回 '15-01-2023'
SELECT REVERSE_F('hello') FROM dual;  -- 返回 'olleh' (無分隔符走內建 REVERSE)

設計說明

  • 參數 p_delimiter 為空時退化為內建 REVERSE;
  • 循環逐段提取分隔符前的子串,前向拼接實現分組反轉;
  • 保留分隔符原位,適合日期、路徑、CSV 等結構化字符串處理;
  • 返回長度限制 4000 字符,超長場景請改用 CLOB 版本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved