sql - 将列字符拆分为行 Oracle

标签 sql oracle split

我到处都在寻找这个功能,我几乎要放弃它了。我有一个 Oracle 表,如下所示:

name      Number_of_Leaves    status
cheque1        5              PPURI
cheque4        10             UUSPDRIPPP

状态列显示每个检查叶的状态:通过、已停止、已销毁、已发出等。 我需要在这样的 View 中表示信息:对于每个检查状态,我应该有一行:

name      Number_of_Leaves    status
    cheque1        5              P
    cheque1        5              P
    cheque1        5              U
    cheque1        5              R
    cheque1        5              I
    cheque4        10             U
    cheque4        10             U
    cheque4        10             S
    cheque4        10             P
    cheque4        10             D
    ...............................

这是否可以以任何方式实现?

最佳答案

只需自己添加此函数;) 例如,使用 TABLE 运算符和预定义的 split 函数:

CREATE OR REPLACE TYPE t_char IS TABLE OF VARCHAR2(1)

/

CREATE OR REPLACE FUNCTION TMP_SPLIT(p_val VARCHAR2)
RETURN t_char IS
v_res t_char;
BEGIN
v_res := t_char(SUBSTR(p_val,1,1));
v_res.extend(LENGTH(p_val)-1);
FOR i IN 2..LENGTH(p_val) LOOP
    v_res(i) := SUBSTR(p_val,i,1);
END LOOP;
RETURN v_res;
END;

/

WITH dat AS (SELECT 'cheque1' name,
                    5 Number_of_Leaves,
                    'PPURI' status FROM DUAL
             UNION 
             SELECT 'cheque4' name,
                    10 Number_of_Leaves,
                    'UUSPDRIPPP' status FROM DUAL)
SELECT dat.name, dat.number_of_leaves, spl.*
FROM dat 
     LEFT JOIN TABLE(TMP_SPLIT(dat.status)) spl ON 1=1

/

现有表调用函数的示例:

SELECT table1.name, table1.number_of_leaves, spl.*
FROM table1
     LEFT JOIN TABLE(TMP_SPLIT(table1.status)) spl ON 1=1

关于sql - 将列字符拆分为行 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22351791/

相关文章:

database - 与用于 OLTP 的 Oracle 和 DB2 相比,PostgreSQL 缺少的最关键的特性是什么?

string - Lua中比较字符串是否最多有一个错误字符

JavaScript 围绕大括号拆分

c# - 尝试连接到 Azure SQL 时提供程序未返回 ProviderManifestToken 字符串

java - 将 SQL 查询结果导出到 csv 或 Excel

sql - 更新查询结果未反射(reflect)在表中

python - Pandas 按列值拆分 DataFrame

mysql - 使用查询结果更新表

java - 通过 JDBC 查询 Oracle DB 给出 null,而直接查询给出输出

java - JPA 查询带有当前时间戳过滤器 - Oracle 的秒数