【问题标题】:sql result for TOAD queryTOAD 查询的 sql 结果
【发布时间】:2022-06-21 22:02:08
【问题描述】:

我正在寻找一种方法来破坏单元格内的数据并创建新行以回收另一个单元格的值,需要一些帮助。

ROLE ROLE RIGHTS
AB-ATL =READ;=TOTAL;=HAPPY;=MAD

希望能够写到我可以获得以下结果的地方

ROLE ROLE RIGHTS
AB-ATL READ
AB-ATL TOTAL
AB-ATL HAPPY
AB-ATL MAD

因此将单元格值分成 4 行,其中常量为角色。这是通过 SUBSTRING 完成的吗??

【问题讨论】:

  • 您可以编写一个递归查询来遍历子字符串(或者在Oracle中编写一个PL/SQL流水线函数来拆分字符串)。
  • 这里的问题其实是数据库。如果您对单独的角色权限感兴趣,请将它们单独存储,否则您将违反第一范式。
  • 将您的数据库模型至少标准化为 1NF:“每列一个值”。这个“数据库 101”知识。

标签: sql database toad


【解决方案1】:

由于您标记了 toad,我将假设为 oracle。如果这个假设是正确的。 您可以使用 regexp_substr 以及按级别连接。将字符串拆分为行,如此处所述。 https://blogs.oracle.com/sql/post/split-comma-separated-values-into-rows-in-oracle-database

这是小提琴https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=6a151b5a87ed2bd81ddf938209ba42df

with rws as (
  select '=READ;=TOTAL;=HAPPY;=MAD' str from dual
)
  select regexp_substr (
           str,
           '[^=;]+',
           1,
           level
         ) value
  from   rws
  connect by level <= 
    length ( str ) - length ( replace ( str, '=' ) ) + 1;

【讨论】:

    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-09-04
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多