Oracle中文 數字混雜欄位的排序

2021-05-27 06:18:55 字數 1350 閱讀 9894

對oracle中中文、數字混雜形式的字段進行排序的方法:

例如:

order by nlssort(欄位名,'nls_sort = schinese_pinyin_m'), to_number(translate(欄位名, '0123456789' || 欄位名, '0123456789'))

nlssort() 函式:

如果資料庫字符集選用的是zh16gbk,那麼使用order by預設是按照漢字的「二進位制編碼」順序進行排序的。

可以使用nlssort()函式可以改變oralce 對漢字的排序規則,排序規則如下(前三條對簡體中文進行排序,後兩條對正體中文進行排序):

1.schinese_radical_m

簡體中文按照第一順序是「部首」、第二順序是「筆畫數」進行排序。

2.schinese_stroke_m

簡體中文按照第一順序「筆畫數」、是第二順序是「部首」進行排序。

3.schinese_pinyin_m

簡體中文按照拼音進行排序。上例中即對簡體漢字按照拼音進行排序。

4.tchinese_radical_m

正體中文按照第一順序是「部首」、第二順序是「筆畫數」進行排序。

5.tchinese_stroke_m

正體中文按照第一順序是「筆畫數」、第二順序是「部首」進行排序。

translate() 函式:

語法:translate(char, from, to)

用法:將char中出現在from中的每個字元替換為to中的相應字元,若from比to字串長,那麼在from中比to中多出的字元將會被刪除。三個引數中有乙個是空,返回值也將是空值。

該函式可用於剔除欄位中的漢字,例:

select translate('例1213','0123456789'||'例1213','0123456789') as result from dual;

result

------------

1213

分析:該語句要將 char--'例1213' 中出現在 from--'0123456789例1213' 中的字元替換為 to--'0123456789' 中的字元,根據 from、to 的對應關係,將 char 中的 0替換成0、1替換成1、...9替換成9,即 char 中的數字不變,又 from 比 to 長,則 from 中比 to 中多出的字元將被刪除,即刪除 char 中的漢字。

數字轉中文數字與中文數字轉數字

利用陣列與map的資料結構進行中文數字與數字之間的互相轉換 public class numberutil private static final char cn num private static final char cn unit private static final string c...

數字轉中文數字大寫

做財務報表時常需要將金額轉化中文數字大寫,有點坑。author qzc createdate 2015年6月22日 下午6 08 20 version 1 類 介面 主要功能 public class numbertocn 漢語中貨幣單位大寫,這樣的設計類似於佔位符 private static f...

大寫中文數字 財務

壹 貳 叄 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬 億 元 圓 角 分 零 整。這是大家經常要填寫的大寫數字,問什麼要用大寫數字呢?想必很多人都不是很清楚!先看看以下兩個有關大寫數字的 1 數碼與大 小寫數字的對照表 數碼 小寫數字 大寫數字 0 零 1 一 壹 2 二 貳 3 三 叄 參 4 四 ...