Regex 在列中搜索特定字符,然后从中创建不同的列

Regex 在列中搜索特定字符,然后从中创建不同的列,regex,oracle11g,Regex,Oracle11g,我有一个param_Value列,它有不同的值。我需要提取这些值并为它们创建列 |PARAM_NAME |param_Value | __________|____________ |Step 4 | SP:0.09 | |Procedure | MAX:125 | |Step 4 | SP:Ambient| |(null) | +/-:N/A | |Steam | SP:2 | |Step

我有一个param_Value列,它有不同的值。我需要提取这些值并为它们创建列

  |PARAM_NAME |param_Value |
    __________|____________
  |Step 4     |  SP:0.09   |
  |Procedure  |  MAX:125   |
  |Step 4     |  SP:Ambient|
  |(null)     |  +/-:N/A   |
  |Steam      |  SP:2      |
  |Step 3     |  MIN:0     |
  |Step 4     |  RDPHN427B |
  |Testing De |  N/A       |
我只想要带:的列,并给它们命名:

  SP:                SET_POINT_VALUE,
  MAX:               MAX_LIMIT,
  MIN:               MIN_LIMIT,
  +/-:               UPPER_LOWER_LIMIT
到目前为止,我得到的是:

CREATE OR REPLACE FORCE VIEW PROCESS_STEPS 
("PARAM_NAME", "SET_POINT_VALUE", "UPPER_LOWER_LIMIT", "MAX_VALUE", "MIN_VALUE")
AS
SELECT PARAM_NAME,        
       REGEXP_LIKE("param_Value", 'SP:')   SET_POINT_VALUE,
       REGEXP_LIKE("param_Value", '+/-:') UPPER_LOWER_LIMIT,
       REGEXP_LIKE("param_Value", 'MAX:')  MAX_VALUE,
       REGEXP_LIKE("param_Value", 'MIN:')  MIN_VALUE
FROM PROCESS_STEPS 
;

我更熟悉TSQL和MySQL,但这应该符合我的要求。如果不完全正确,它至少应该为你指明正确的方向

CREATE OR REPLACE FORCE VIEW PROCESS_STEPS 
    ("PARAM_NAME", "SET_POINT_VALUE", "UPPER_LOWER_LIMIT", "MAX_VALUE", "MIN_VALUE")
AS
SELECT PARAM_NAME  
        , CASE WHEN "param_Value" LIKE 'SP:%'
            THEN SUBSTR("param_Value", INSTR("param_Value", ':')+1)
            ELSE Null
        END SET_POINT_VALUE
        , CASE WHEN "param_Value" LIKE '+/-:%'
            THEN SUBSTR("param_Value", INSTR("param_Value", ':')+1)
            ELSE Null
        END UPPER_LOWER_LIMIT
        , CASE WHEN "param_Value" LIKE 'MAX:%'
            THEN SUBSTR("param_Value", INSTR("param_Value", ':')+1)
            ELSE Null
        END MAX_VALUE
        , CASE WHEN "param_Value" LIKE 'MIN:%'
            THEN SUBSTR("param_Value", INSTR("param_Value", ':')+1)
            ELSE Null
        END MIN_VALUE
    FROM PROCESS_STEPS
;
这里的基本概念是通过LIKE识别所需的信息,然后使用SUBSTR和INSTR提取信息。虽然LIKE通常是一个值得远离的东西,因为在你的案例中没有领先的%,它是,因此可能不是一个总的效率下降


实际上,我不得不问你为什么要这样布置数据——在任何语言中,子字符串操作都很慢,DB也不例外。为什么不为您的限额类型使用另一列?为什么不把它放在您当前看到的视图中呢?

构建a可能会帮助人们帮助您。是的。我将重新创建该视图并创建这些列。