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