Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да обърнете низ в Oracle (11g) SQL, без да използвате функцията REVERSE().

Ако се опитвате да избегнете недокументирания reverse() можете да използвате utl_raw.reverse() функция вместо това също с подходящо преобразуване и от 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                                                                     

Така че това е вземане на първоначална стойност; извършване на utl_i18n.string_to_raw() на това; след това предаване на това на utl_raw.reverse(); след това предаване на резултата от това обратно през utl_i18n.raw_to_char() .

Не съм напълно сигурен как това ще се справи с многобайтови знаци или какво бихте искали да се случи с тях...

Или вариант от дискусията @RahulTripathi, свързана към , без обработка на набора от символи:

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                                                                     

Но тази нишка също отбелязва, че работи само за еднобайтови знаци.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранената процедура в Oracle дава грешка PLS-00428

  2. Не позволявайте на потоците да ви заблуждават

  3. Преобразувайте VARCHAR2 в число

  4. Sql заявка за проверка дали поднизът на колона 1 съдържа е стойност на друга колона

  5. Извличане на редове с изключително висока скорост