REVERSE關鍵字之REVERSE函式

bisal發表於2013-09-25

昨天說到@dbsnake講的一個reverse函式索引避免全表掃描的案例,REVERSE關鍵字可以用於函式和索引。REVERSE函式和REVERSE索引。這次先試試REVERSE函式。


REVERSE函式:針對資料庫內部儲存的物件編碼進行反轉。

REVERSE is an undocumented Oracle string function, which returns the input string in its reverse order.


SQL> select reverse('12345') from dual;
REVER
-----
54321

REVERSE函式是將數字的順序逆序列印。


SQL> select reverse('Oracle') from dual;
REVERS
------
elcarO

也可以將字母的順序逆序列印。


SQL> select reverse('測試') from dual;
REVE
----
????

列印出亂碼,可能是字符集的問題,當前使用的是SSH方式登入伺服器後sqlplus,

SQL> show parameter nls_lang
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_language                         string      AMERICAN


登入到筆記本的PLSQL中,由於OS是中文字符集,所以這裡應該可以顯示中文。

SQL> SELECT '測試' FROM dual;
'測試'
------
測試


SQL> select reverse('測試') from dual;
REVERSE('測試')
---------------
允獠

已經是亂碼了。


======================================================================

下面使用dump看看實際執行reverse的情況。


SQL> select dump('12345'), dump(reverse('12345')) from dual;
DUMP('12345')                DUMP(REVERSE('12345'))
---------------------------- ----------------------------
Typ=96 Len=5: 49,50,51,52,53 Typ=96 Len=5: 53,52,51,50,49
將'12345'的ASCII字碼按逆序排列列印。


SQL> select dump('Oracle'), dump(reverse('Oracle')) from dual;
DUMP('ORACLE')                     DUMP(REVERSE('ORACLE'))
---------------------------------- ----------------------------------
Typ=96 Len=6: 79,114,97,99,108,101 Typ=96 Len=6: 101,108,99,97,114,79

將'Oracle'的ASCII字碼按逆序排列列印。


SQL> select dump('測試'), dump(reverse('測試')) from dual;
DUMP('測試')                  DUMP(REVERSE('測試'))
----------------------------- -----------------------------
Typ=96 Len=4: 178,226,202,212 Typ=96 Len=4: 212,202,226,178

這裡也是將‘測試’的ASCII字碼按逆序排列列印,但因為中文字元是由兩個ASCII組成的,當逆序時,新組合的ASCII兩兩形成一個新的漢字,212,202是允,226,178獠。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-773321/,如需轉載,請註明出處,否則將追究法律責任。

相關文章