【问题标题】:Regular Expression to parse 112^3^1^1^ [duplicate]正则表达式解析 112^3^1^1^ [重复]
【发布时间】:2018-03-04 03:51:13
【问题描述】:

我需要将112^3^1^1^ 之类的字符串解析为单独的值。

第一个('112')是order_no,第二个是line_no,第三个是release_no,第四个是receipt_no。

我可以在 Oracle 中使用哪种正则表达式?

【问题讨论】:

  • regexp_instr、regex_substr、regexp_count、regexp_replace等各种正则表达式函数。你需要从这个例子中看到什么输出?您是指具体的 PL/SQL(编程语言)还是 Oracle SQL?
  • 我将采用其中一个值在函数中使用,该函数将成为我的 SQL 视图中的一列。例如: abcd_api.get_unit_meas(order_no,line_no,release_no,receipt_no) 。 PLSQL 和 Oracle SQL 有什么区别?
  • PL/SQL 是用于编写过程、函数、数独求解器等的数据库内编程语言。SQL 就是 SQL(尽管我们可以说“Oracle SQL”以明确表示我们指的是 Oracle 的版本,而不是微软等)。我认为对于其他一些供应商来说,这条线有些模糊,并且程序往往是某种存储脚本,其中包含一些额外的功能。在 Oracle 中并非如此。
  • 没关系,谢谢 :) 但我仍然不知道如何获得这个值。我正在研究正则表达式函数,但我无法理解或找到适合我的案例的解决方案。

标签: sql regex oracle


【解决方案1】:
with demo (str) as
     ( select '112^3^1^1^' from dual )
select str
     , regexp_substr(str,'[^^]+',1,1) as order_no
     , regexp_substr(str,'[^^]+',1,2) as line_no
     , regexp_substr(str,'[^^]+',1,3) as release_no
     , regexp_substr(str,'[^^]+',1,4) as receipt_no
from   demo;

STR        ORDER_NO   LINE_NO   RELEASE_NO   RECEIPT_NO
---------- ---------- --------- ------------ ----------
112^3^1^1^ 112        3         1            1

这取决于每个组件都有一个值,因为它使用的模式是'一个或多个不是^'的字符。如果缺少值,则需要进行一些调整,例如'112^3^^1^'(没有 release_no)。

【讨论】:

  • 非常感谢威廉 :) 这就是我希望找到的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2011-01-23
相关资源
最近更新 更多