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

Reverzní řetězec slovo po slovu pomocí SQL

Verze založená na XML, abyste se vyhnuli definování vlastní funkce; vyžaduje 11g pro listagg() :

select listagg(word, ' ') within group (order by rn desc) as reversed
from (
  select word, rownum as rn
  from xmltable('for $i in ora:tokenize($STR, " ") return $i'
    passing 'Hello World! I Love StackOverflow' as str
    columns word varchar2(4000) path '.'
  )
);

REVERSED                               
----------------------------------------
StackOverflow Love I World! Hello        

XMLTable() provede tokenizaci a přiřadí číslo řádku:

select rownum as rn, word
from xmltable('for $i in ora:tokenize($STR, " ") return $i'
  passing 'Hello World! I Love StackOverflow' as str
  columns word varchar2(4000) path '.'
);

        RN WORD               
---------- --------------------
         1 Hello                
         2 World!               
         3 I                    
         4 Love                 
         5 StackOverflow        

listagg() poté jej v opačném pořadí znovu rozložte.



  1. Eliminace MySQL Split-Brain v multi-cloudových databázích

  2. Funkce REPLACE() v Oracle

  3. Limit velikosti indexu 900 bajtů v délce znaků

  4. Je možné nastavit časový limit pro SQL dotaz na Microsoft SQL Server?