sql >> Database >  >> RDS >> Oracle

Omgekeerde tekenreeks woord voor woord met behulp van SQL

XML-gebaseerde versie om te voorkomen dat u uw eigen functie definieert; vereist 11g voor 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        

De XMLTable() doet de tokenisering en kent een rijnummer toe:

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        

De listagg() zet het dan in omgekeerde volgorde weer in elkaar.



  1. SQL Server Pre-Login Handshake-bevestigingsfout

  2. Combineer meerdere onderliggende rijen in één rij MYSQL

  3. SQL Server-controletabel gepartitioneerd

  4. SQL DELETE met JOIN andere tabel voor WHERE voorwaarde