關於java中實現在oracle資料庫中實現對中文首字母進行排序的解決方案
關於java中實現在oracle資料庫中實現對中文首字母進行排序的解決方案
首先介紹Oracle 9i新增加的一個系統自帶的排序函式1、按首字母排序
在oracle9i中新增了按照拼音、部首、筆畫排序功能。設定NLS_SORT值
SCHINESE_RADICAL_M 按照部首(第一順序)、筆劃(第二順序)排序
SCHINESE_STROKE_M 按照筆劃(第一順序)、部首(第二順序)排序
SCHINESE_PINYIN_M 按照拼音排序
oracle9i中新增了按照拼音、部首、筆畫排序功能
用法示例:
- 拼音
- SELECT * FROM TEAM ORDER BY NLSSORT(排序欄位,'NLS_SORT = SCHINESE_PINYIN_M')
- 筆劃
- SELECT * FROM TEAM ORDER BY NLSSORT(排序欄位,'NLS_SORT = SCHINESE_STROKE_M')
- 部首
- SELECT * FROM TEAM ORDER BY NLSSORT(排序欄位,'NLS_SORT = SCHINESE_RADICAL_M')
2、按首字母拼音查詢
首先我們要建立一個可以查詢漢字首字母的函式,函式程式碼如下:
- CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
- V_COMPARE VARCHAR2(100);
- V_RETURN VARCHAR2(4000);
- FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
- BEGIN
- RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
- END;
- BEGIN
- FOR I IN 1..LENGTH(P_NAME) LOOP
- V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));
- IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN
- V_RETURN := V_RETURN || 'a';
- ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN
- V_RETURN := V_RETURN || 'b';
- ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN
- V_RETURN := V_RETURN || 'c';
- ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN
- V_RETURN := V_RETURN || 'd';
- ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN
- V_RETURN := V_RETURN || 'e';
- ELSIF V_COMPARE >= F_NLSSORT('發 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN
- V_RETURN := V_RETURN || 'f';
- ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN
- V_RETURN := V_RETURN || 'g';
- ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN
- V_RETURN := V_RETURN || 'h';
- ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN
- V_RETURN := V_RETURN || 'j';
- ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN
- V_RETURN := V_RETURN || 'k';
- ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN
- V_RETURN := V_RETURN || 'l';
- ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN
- V_RETURN := V_RETURN || 'm';
- ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN
- V_RETURN := V_RETURN || 'n';
- ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN
- V_RETURN := V_RETURN || 'o';
- ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN
- V_RETURN := V_RETURN || 'p';
- ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN
- V_RETURN := V_RETURN || 'q';
- ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN
- V_RETURN := V_RETURN || 'r';
- ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN
- V_RETURN := V_RETURN || 's';
- ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN
- V_RETURN := V_RETURN || 't';
- ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN
- V_RETURN := V_RETURN || 'w';
- ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN
- V_RETURN := V_RETURN || 'x';
- ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN
- V_RETURN := V_RETURN || 'y';
- ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN
- V_RETURN := V_RETURN || 'z';
- END IF;
- END LOOP;
- RETURN V_RETURN;
- END;
隨後,我們可以先取出姓名,然後擷取第一個漢字,最後取漢字的首字母,即可用來作為查詢條件
- select e.fullname,e.expert_id from expert e where f_trans_pinyin_capital(substr(e.fullname,1,1)) = 'z'
最後展示一個將兩個結合起來運用的例子:
- select e.expert_id,e.eperson_id,e.fullname,
- sum(b2i.browse_num) browsecount,
- count(o.object_id),wmsys.wm_concat(distinct d.name)
- from expert e
- left join expert2disciplinetype e2d on e2d.expert_id = e.expert_id
- left join disciplinetype d on d.discipline_type_id = e2d.discipline_type_id
- and d.upid = '0'
- left join community2expert c2e on c2e.expert_id = e.expert_id
- left join item i on i.item_type_id = 'AcademicRes' and i.withdrawn = 'N'
- join metadatavalue m on m.item_id = i.item_id and m.metadata_field_id = '64'
- join objectpublishinfo o on o.object_id = i.item_id
- and o.object_type = 'item' and o.viewobjecttype = 'eperson'
- and o.viewobjectid = e.eperson_id and o.state = '1'
- and o.publishstate_id = '3'
- left join browse2item b2i on b2i.item_id = o.object_id
- where e.state = '1' and f_trans_pinyin_capital(substr(e.fullname,1,1)) = 'z'
- group by e.expert_id,e.eperson_id,e.fullname
- order by nlssort(e.fullname,'NLS_SORT=SCHINESE_PINYIN_M')
相關文章
- 在Oracle中實現資料庫的複製Oracle資料庫
- MSSQL資料庫映象在Oracle中的實現方法SQL資料庫Oracle
- 在Oracle中實現資料庫的複製(轉)Oracle資料庫
- 在Java中對集合當中的物件進行排序Java物件排序
- Java使用Collections對中文字元進行首字母排序Java字元排序
- linux 中awk命令實現按照 指定的字元對文字進行排序Linux字元排序
- 在java中實現對FORM的列印功能 (轉)JavaORM
- java對中文(拼音)進行排序Java排序
- 在vc中實現獲取漢字拼音的首字母
- 關於.NET中WinForms裡面的ListBox實現資料繫結的解決方法 (轉)ORM
- 用Asp實現對ORACLE資料庫的操作Oracle資料庫
- java 實現excel中的資料匯入到資料庫的功能JavaExcel資料庫
- Java關於資料結構的實現:樹Java資料結構
- js實現的讓文字以拼音首字母順序進行排序程式碼JS排序
- oracle 觸發器實現禁止在資料庫中建立dblink ---透過觸發器實現Oracle觸發器資料庫
- Redis中單機資料庫的實現Redis資料庫
- 在j2ee中實現一般java物件資料庫的方法。Java物件資料庫
- 關於order by中的資料排序排序
- WordPress中實現Markdown編輯的終極解決方案
- 決策樹在sklearn中的實現
- asp.net Repeater拖拽實現排序並同步排序欄位到資料庫中ASP.NET排序資料庫
- Java關於資料結構的實現:雜湊Java資料結構
- 使用Java實現在SQLserver中實現圖片的儲存JavaSQLServer
- 前後分離實現中,後臺 Laravel 接收資料的跨域解決方案Laravel跨域
- 在小程式中實現 Mixins 方案
- django中的資料庫連線池實現Django資料庫
- 在Oracle中實現定時操作Oracle
- Java中實現執行緒的方式Java執行緒
- 在.net中用資料工廠實現多資料庫的操作方案資料庫
- Java執行緒池實現原理及其在美團業務中的實踐Java執行緒
- 關於Golang中的依賴注入實現Golang依賴注入
- Oracle中的sql%rowcount在瀚高資料庫中的相容方案OracleSQL資料庫
- RMAN COPY實現ORACLE資料庫儲存遷移的方案Oracle資料庫
- Flutter進階:在應用中實現 Hero(飛行) 動畫Flutter動畫
- Java用OCI驅連Oracle資料庫的實現方法JavaOracle資料庫
- 實現更好DEVOPS,關鍵取決於資料dev
- 轉:在ABAP中實現進度條的例子
- 初學者:關於用java實現並行Java並行