String 使用PL/SQL将字符串拆分为一行或多行

String 使用PL/SQL将字符串拆分为一行或多行,string,oracle,plsql,String,Oracle,Plsql,我有两个示例字符串,布局如下: “A公司-19年1月1日-19年6月30日-100.00%” ‘公司B-01-Jan-19-30-Jun-19-50.00%/公司C-01-Jan-19-30-Jun-19-50.00%’ 它描述了在某个客户或多个客户工作的顾问的百分比。我在上面的版面中收到了他们的信息。我想做的是拆分这些字符串并将其存储在表中。该表的结构如下(括号内有意向数据): ID-编号——自动生成的行ID ConsultantID-数字——外键到个人表 公司-Varchar2(128)—

我有两个示例字符串,布局如下:

“A公司-19年1月1日-19年6月30日-100.00%”
‘公司B-01-Jan-19-30-Jun-19-50.00%/公司C-01-Jan-19-30-Jun-19-50.00%’

它描述了在某个客户或多个客户工作的顾问的百分比。我在上面的版面中收到了他们的信息。我想做的是拆分这些字符串并将其存储在表中。该表的结构如下(括号内有意向数据):

  • ID-编号——自动生成的行ID
  • ConsultantID-数字——外键到个人表
  • 公司-Varchar2(128)——咨询顾问工作的公司名称(A公司)
  • 开工日期-日期——项目开工日期(19年1月1日)
  • 结束日期-日期——项目结束日期(19年6月30日)
  • 百分比-数字——顾问在客户处工作的时间百分比(100.00%)
据我所知,到目前为止,一个人工作的公司最多只有两家,但可能更多

我正在使用Oracle SQL,这与我正在使用的项目是不可协商的


不久前我就开始使用PL/SQL(我想我需要PL/SQL来实现这一点,因为我无法找到一种只使用Oracle SQL来实现这一点的方法),但我还没有找到一种方法来实现这一点当有一个(显然)或两个不同的公司时,拆分不是问题,但如果有两个以上的公司,我不知道如何实现自动化。对于Java这样的语言,数组和for循环不会有问题,但对于我来说,在PL/SQL中它仍然是问题

下面是我用于拆分的一些代码

DECLARE
total varchar2(256) := 'Company B - 01-Jan-19 - 30-Jun-19 - 50.00% / Company C - 01-Jan-19 - 30-Jun-19 - 50.00%';
firstPart varchar2(128);
secondPart varchar2(128);
BEGIN   

firstPart := SUBSTR(total, 0, (INSTR(total, '/')) -2);
secondPart := SUBSTR(total, (INSTR(total, '/')) +2);
END;
有没有一种方法可以让这项工作在(潜在的)无限公司中进行?如果很困难,我可以假设员工在不超过五家公司工作,但我非常希望没有最高限额


第二部分是划分公司名称、开始日期、结束日期和百分比。我不认为这很难,但它可能与解决主要问题有关。因此,如果你有一个主要问题的解决方案,我可以从那里开始

请随便问任何问题,或者让我觉得自己很愚蠢,因为这很容易,而我只是还没有找到解决办法


提前多谢

在一个包含XML、JSON、CSV文件等的世界里,人们已经做了很多年了,为什么人们仍然坚持用自己的非标准方法来传递字符串中的连接值?我知道这是您正在努力满足的需求,但浪费在这类任务上的开发人员的工作量让我哭泣。无论如何,确实有。为什么不看看其中的一些呢?因为你有一个复杂的格式,你应该考虑编写而不是用复杂的正则表达式来解决问题。java有一些非常强大的解析字符串的工具。您可以在数据库中创建一个类,并使用类似split()的方法。如果您对这种方法感兴趣,我可以提供一个例子。Oracle也有。SQL和PL/SQL版本。@APC感谢您的回复。我知道这是一种不好的做法,但我只得到一个Excel文件,其中有许多内容在单独的列中,但出于某种原因,它们会一起解析。我对Excel文件的格式没有任何影响。我也抱怨过,但没用。谢谢你的建议,我会调查的。我自己找不到任何问题,但谢谢你的帮助。