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

Jak obrátit řetězec v Oracle (11g) SQL bez použití funkce REVERSE().

Pokud se snažíte vyhnout nezdokumentovanému reverse() můžete použít funkci utl_raw.reverse() funkce místo toho s vhodnou konverzí az RAW:

select utl_i18n.raw_to_char(
  utl_raw.reverse(
    utl_i18n.string_to_raw('Some string', 'AL32UTF8')), 'AL32UTF8')
from dual;

UTL_I18N.RAW_TO_CHAR(UTL_RAW.REVERSE(UTL_I18N.STRING_TO_RAW('SOMESTRING','AL32UT
--------------------------------------------------------------------------------
gnirts emoS                                                                     

Takže to nabývá původní hodnoty; pomocí utl_i18n.string_to_raw() na tom; pak to předat utl_raw.reverse(); pak předání výsledku zpět přes utl_i18n.raw_to_char() .

Nejste si úplně jisti, jak se to vyrovná s vícebajtovými znaky nebo co byste s nimi stejně chtěli...

Nebo variace z diskuze @RahulTripathi, na kterou odkazuje , bez zpracování znakové sady:

select utl_raw.cast_to_varchar2(utl_raw.reverse(utl_raw.cast_to_raw('Some string')))
from dual;

UTL_RAW.CAST_TO_VARCHAR2(UTL_RAW.REVERSE(UTL_RAW.CAST_TO_RAW('SOMESTRING')))   
--------------------------------------------------------------------------------
gnirts emoS                                                                     

Ale toto vlákno také poznamenává, že funguje pouze pro jednobajtové znaky.



  1. Vytvoření webové aplikace od nuly pomocí Python Flask a MySQL:Část 4

  2. Propojte Node.js s Oracle na platformě Windows

  3. PostgreSQL dotaz běží rychleji s indexovým skenováním, ale engine zvolí hash join

  4. Změna řazení databáze SQL Server