sql >> Databasteknik >  >> RDS >> Oracle

Hur man vänder en sträng i Oracle (11g) SQL utan att använda REVERSE()-funktionen

Om du försöker undvika den odokumenterade reverse() funktionen kan du använda utl_raw.reverse() funktion istället med lämplig konvertering också och från 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                                                                     

Så det är att ta ett ursprungligt värde; gör utl_i18n.string_to_raw() på det; skicka sedan det till utl_raw.reverse(); skicka sedan tillbaka resultatet av det genom utl_i18n.raw_to_char() .

Inte helt säker på hur det kommer att klara multibyte-tecken, eller vad du vill ska hända med dem i alla fall...

Eller en variant av diskussionen @RahulTripathi länkade till , utan teckenuppsättningshantering:

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                                                                     

Men den tråden noterar också att den bara fungerar för en-byte-tecken.



  1. MySQL:Enkelt sätt att växla ett värde för ett int-fält

  2. PHPMyAdmin tvingar använda ut8mb4 som standardsortering

  3. Hämtar de senast infogade ID:n för flera rader

  4. Summera uppslagningar i SSRS