sql >> Databáze >  >> RDS >> Oracle

Nahraďte část pole hodnotami z dotazu

Možná není nejúčinnější, ale funguje rekurzivně (tj. pokud crit_description sám obsahuje "zástupné symboly", ty jsou také rozšířeny. (První řešení, jednodušší než to, co je uvedeno níže, tento rekurzivní krok neprovádělo.) Viz třetí ukázkový vstup, který jsem přidal. Zveřejním příspěvek znovu později, pokud jej budu moci ještě vyčistit.

POZNÁMKA:To předpokládá, že všechny "zástupné symboly" se skutečně nacházejí v criteria_info stůl; Netestoval jsem, co se stane, když se nenajdou. OP uvést požadavek.

with
     inputs ( criteria ) as (
       select '$1 = True' from dual union all
       select '$2 > $3'   from dual union all
       select '$1 = $4'   from dual
     ),
     criteria_info ( crit_id, crit_description ) as (
       select 1, 'Example 1' from dual union all
       select 2, 'Example 2' from dual union all
       select 3, 'Example 3' from dual union all
       select 4, '$2 + $3'   from dual
     ),
     rec ( criteria, new_str ) as (
       select  criteria, criteria
         from  inputs        
       union all       
       select  r.criteria, 
               regexp_replace(r.new_str, '\$\d+', c.crit_description, 1, 1)
         from  rec r inner join criteria_info c
               on to_number(regexp_substr(r.new_str, '\$(\d+)', 1, 1, null, 1)) = c.crit_id
         where regexp_substr(r.new_str, '\$\d+') is not null
     )
select criteria, new_str
from   rec
where  regexp_substr(new_str, '\$\d+') is null
;


CRITERIA  NEW_STR
--------- ------------------------------------
$1 = True Example 1 = True
$2 > $3   Example 2 > Example 3
$1 = $4   Example 1 = Example 2 + Example 3

3 rows selected.


  1. odstranit zastavovací slova bez odvození v postgresql

  2. SQL/Regex Challenge/Puzzle:Jak odstranit komentáře z SQL kódu (pomocí SQL dotazu)?

  3. PHP json_encode Problém se zpětným lomítkem a názvem pole

  4. Windows Azure SQL Database – sloupec automatického přírůstku identity přeskakuje hodnoty