Oracle使用正则表达式拆分字段里多行分布式值

不规范的表设计往往会带来程序设计上的麻烦,也会降低SQL的性能。

例如下表显示的内容:

这样我们调取多值字段用来做匹配的话就比较麻烦,我们可以通过正则表达式REGEXP_SUBSTR先将

多值得列分成多行,例如上面所示,我们拆分后变成三行

SELECT DISTINCT KUNNR, 
  MATNR,
  ROW_ID,
  ZFLAG,
  ZVPFLAG,
  REGEXP_SUBSTR(ZBMATNR, '[^,]+', 1, LEVEL) ZBMATNR,
  REGEXP_SUBSTR(ZBCYL, '[^,]+', 1, LEVEL) ZBCYL
  FROM SAP_QM_CUSTOMER_FAKE  WHERE ZVPFLAG='1'
  CONNECT BY LEVEL <= REGEXP_COUNT(ZBMATNR, '\,') + 1

拆分成多行后,我们可以通过建立临时表,将这些数据放到临时表来使用,不会产生其他影响

原文地址:https://www.cnblogs.com/guipeng/p/6531920.html