【问题标题】:How to split a column into two columns when there are multiple delimiters有多个分隔符时如何将一列拆分为两列
【发布时间】:2015-11-27 13:11:37
【问题描述】:

来源栏


Id   | email
_______________________
01   | aemail1, wemail2
02   | bemail1 : xemail2
03   |  cemail1  yemail2
04   | demail1&zemail2

目标列

Id | primary_email| secondary_email
01 | aemail1      | wemail2
02 | bemail1      | xemail2
03 | cemail1      | yemail2
04 | demail1      | zemail2

在某些情况下, 也是分隔符,如果不是 pl/SQL,我们可以使用 SQL 吗?请帮我解决这个问题

【问题讨论】:

  • 看来您现在已经吸取了教训 - 永远不要将数据作为单独的项目存储在同一列中。
  • 最好的方法是规范化表格。
  • 这里可以找到一些线索http://stackoverflow.com/questions/23649813/split-comma-seperated-values-of-a-column-in-row-through-oracle-sql-query
  • 这里使用了多个分隔符,而不是一个分隔符,如果我使用 & 它会弹出运行时数据输入,也包括在内。所以帮助我如何在 SQL 中做,并且不想从源代码中改变任何东西
  • 您能否列出您的email 列可能包含的所有可能的分隔符? email列会不会有特殊字符?

标签: sql oracle


【解决方案1】:

您可以使用正则表达式将电子邮件一分为二。 此示例在一个或多个连续分隔符上拆分 , or space or &

select 
  ID, 
  regexp_replace(EMAIL, '^(.*)[,\s&]+.*', '\1') AS PRIMARY_EMAIL,
  regexp_replace(EMAIL, '.*[,\s&]+(.*)', '\1') AS SECONDARY_EMAIL 
from TABLE_NAME

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2018-03-17
    • 2021-03-05
    相关资源
    最近更新 更多