【问题标题】:how to split string with multiple special characters in oracleoracle如何将字符串分割为多个特殊字符
【发布时间】:2020-03-23 06:35:23
【问题描述】:

我有一个包含 2 个特殊字符的字符串,如下所示

String :'PAN~HLASD4564P|VOTER_ID~VDD3455355'

我希望在 2 列中输出如下:

ID_TYPE       VALUE
-------       ------
PAN           HLASD4564P
VOTER_ID      VDD3455355

enter image description here

【问题讨论】:

  • “价值”可以是null吗?

标签: sql regex oracle split


【解决方案1】:

您可以使用CONNECT BYREGEXP_SUBSTR,如下所示:

SQL> WITH YOUR_DATA AS (
  2      SELECT 'PAN~HLASD4564P|VOTER_ID~VDD3455355' AS STR
  3      FROM DUAL
  4  ) -- Your query starts from here
  5  SELECT 
  6      REGEXP_SUBSTR(NEW_STR, '[^~]+', 1, 1) AS ID,
  7      REGEXP_SUBSTR(NEW_STR, '[^~]+', 1, 2) AS VALUE
  8  FROM
  9      (
 10          SELECT REGEXP_SUBSTR(STR, '[^|]+', 1, LEVEL) NEW_STR
 11          FROM YOUR_DATA
 12          CONNECT BY LEVEL <= 2
 13      );

ID         VALUE
---------- -------------
PAN        HLASD4564P
VOTER_ID   VDD3455355

SQL>

【讨论】:

  • 如果这个答案解决了你的问题,那么请accept它,这样你的问题就会被标记为已解决。
  • OP 显示了带有两个编码行(id 类型和相应值)的示例输入。原则上,他可以在输入字符串中包含任意数量的此类行。如果您将CONNECT BY 条件修改为LEVEL &lt;= REGEXP_COUNT(....),您的查询将解决更普遍的问题,即输出中的行数事先不知道。请注意,如果“值”(或“id”,但不太可能)可以是 null - 在输入中编码为空子字符串,您可能还需要稍微修改代码。
  • 是的,我已将 CONNECT BY 条件修改为 LEVEL
猜你喜欢
  • 2019-11-03
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2022-08-11
相关资源
最近更新 更多