0

異なる値を持つ 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 
;
4

1 に答える 1

1

私は 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 は通常、避けるべきものですが、あなたの場合は先頭の % がないため、それはSargableであり、おそらく全体的な効率の低下ではありません。

ただし、実際には、なぜこのようにデータをレイアウトしているのかを質問する必要があります。部分文字列操作はどの言語でも遅く、DB も例外ではありません。制限タイプに別の列を使用してみませんか? 今見ているビューにレイアウトしてみませんか?

于 2013-08-15T19:41:48.250 に答える