查找字符串中数字的出现

时间:2019-03-09 10:57:04

标签: sql amazon-redshift

目标是获取数字,其后跟随RatesLowerBound作为可变汇率,而单独获取数字作为固定汇率。

Input String :- 'Basis(DataKeyBasisAmount(basisProperty=INPUT_EPSO_PAYMENT_AMOUNT)) [+0.05] RateLowerBound(value=2, inclusive=false) | [+0.07] RateLowerBound(value=5, inclusive=false) | [+0.10] RateLowerBound(value=20, inclusive=false) | [+0.35]'
Expected Output :- Var_Rate_1, Var_Rate_2, Var_Rate_3 , Fixed Rate
                     +0,05       +0.07       +0.10        +0.35

尝试了以下sql代码以获取结果。它给出了预期的输出

SELECT Col1,
        REPLACE(REGEXP_SUBSTR (Col1,'\\[[^]]*',1,1),'[','') AS Var_Rate_1
        ,REPLACE(REGEXP_SUBSTR (Col1,'\\[[^]]*',1,2),'[','') AS Var_Rate_1
        ,REPLACE(REGEXP_SUBSTR (Col1,'\\[[^]]*',1,3),'[','') AS Var_Rate_1
        ,REPLACE(REGEXP_SUBSTR (Col1,'\\[[^]]*',1,4),'[','') AS Fixed_Rate_1
FROM (SELECT 'Basis(DataKeyBasisAmount(basisProperty=INPUT_EPSO_PAYMENT_AMOUNT)) [+0.05] RateLowerBound(value=2, inclusive=false) | [+0.07] RateLowerBound(value=5, inclusive=false) | [+0.10] RateLowerBound(value=20, inclusive=false) | [+0.35]' AS Col1);

但是问题是固定汇率和浮动汇率的顺序可能会在输入字符串中发生变化。例如:-在示例字符串中,固定利率出现在最后,但是在其他字符串中,它可以作为第一个元素出现。因此,很难根据位置进行标记。

1 个答案:

答案 0 :(得分:0)

我相信这可以满足您的需求

SELECT LEFT(REGEXP_SUBSTR(Col1, '.{6} RateLowerBound', 1, 1), 5) AS Var_Rate_1,
       LEFT(REGEXP_SUBSTR(Col1, '.{6} RateLowerBound', 1, 2), 5) AS Var_Rate_2,
       LEFT(REGEXP_SUBSTR(Col1, '.{6} RateLowerBound', 1, 3), 5) AS Var_Rate_3,
       LEFT(REGEXP_SUBSTR(Col1, '.{6} RateLowerBound', 1, 4), 5) AS Var_Rate_4