zoukankan      html  css  js  c++  java
  • Oracle 10g如何对用户姓名,按首字母排序、查询

    首先介绍Oracle 9i新增加的一个系统自带的排序函数 
    1、按首字母排序 
    在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值     
    SCHINESE_RADICAL_M   按照部首(第一顺序)、笔划(第二顺序)排序     
    SCHINESE_STROKE_M   按照笔划(第一顺序)、部首(第二顺序)排序     
    SCHINESE_PINYIN_M   按照拼音排序 
    oracle9i中新增了按照拼音、部首、笔画排序功能 
    用法示例: 

    1. 拼音   
    2. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_PINYIN_M')   
    3. 笔划   
    4. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_STROKE_M')   
    5. 部首   
    6. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_RADICAL_M')   


    2、按首字母拼音查询 
    首先我们要创建一个可以查询汉字首字母的函数,函数代码如下: 

    1. CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS   
    2. V_COMPARE VARCHAR2(100);   
    3. V_RETURN VARCHAR2(4000);   
    4.   
    5. FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS   
    6. BEGIN   
    7. RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');   
    8. END;   
    9. BEGIN   
    10. FOR I IN 1..LENGTH(P_NAME) LOOP   
    11. V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));   
    12. IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN   
    13. V_RETURN := V_RETURN || 'a';   
    14. ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN   
    15. V_RETURN := V_RETURN || 'b';   
    16. ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN   
    17. V_RETURN := V_RETURN || 'c';   
    18. ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN   
    19. V_RETURN := V_RETURN || 'd';   
    20. ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN   
    21. V_RETURN := V_RETURN || 'e';   
    22. ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN   
    23. V_RETURN := V_RETURN || 'f';   
    24. ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN   
    25. V_RETURN := V_RETURN || 'g';   
    26. ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN   
    27. V_RETURN := V_RETURN || 'h';   
    28. ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN   
    29. V_RETURN := V_RETURN || 'j';   
    30. ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN   
    31. V_RETURN := V_RETURN || 'k';   
    32. ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN   
    33. V_RETURN := V_RETURN || 'l';   
    34. ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN   
    35. V_RETURN := V_RETURN || 'm';   
    36. ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN   
    37. V_RETURN := V_RETURN || 'n';   
    38. ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN   
    39. V_RETURN := V_RETURN || 'o';   
    40. ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN   
    41. V_RETURN := V_RETURN || 'p';   
    42. ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN   
    43. V_RETURN := V_RETURN || 'q';   
    44. ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN   
    45. V_RETURN := V_RETURN || 'r';   
    46. ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN   
    47. V_RETURN := V_RETURN || 's';   
    48. ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN   
    49. V_RETURN := V_RETURN || 't';   
    50. ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN   
    51. V_RETURN := V_RETURN || 'w';   
    52. ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN   
    53. V_RETURN := V_RETURN || 'x';   
    54. ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN   
    55. V_RETURN := V_RETURN || 'y';   
    56. ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN   
    57. V_RETURN := V_RETURN || 'z';   
    58. END IF;   
    59. END LOOP;   
    60. RETURN V_RETURN;   
    61. END;   



    随后,我们可以先取出姓名,然后截取第一个汉字,最后取汉字的首字母,即可用来作为查询条件 

    1. select e.fullname,e.expert_id from expert e where f_trans_pinyin_capital(substr(e.fullname,1,1)) = 'z'  




    最后展示一个将两个结合起来运用的例子: 

    1. select e.expert_id,e.eperson_id,e.fullname,  
    2. sum(b2i.browse_num) browsecount,  
    3. count(o.object_id),wmsys.wm_concat(distinct d.name)  
    4. from expert e  
    5. left join expert2disciplinetype e2d on e2d.expert_id = e.expert_id  
    6. left join disciplinetype d on d.discipline_type_id = e2d.discipline_type_id  
    7. and d.upid = '0'  
    8. left join community2expert c2e on c2e.expert_id = e.expert_id  
    9. left join item i on i.item_type_id = 'AcademicRes' and i.withdrawn = 'N'  
    10. join metadatavalue m on m.item_id = i.item_id and m.metadata_field_id = '64'  
    11. join objectpublishinfo o on o.object_id = i.item_id  
    12. and o.object_type = 'item' and o.viewobjecttype = 'eperson'  
    13. and o.viewobjectid = e.eperson_id and o.state = '1'  
    14. and o.publishstate_id = '3'  
    15. left join browse2item b2i on b2i.item_id = o.object_id  
    16. where e.state = '1' and f_trans_pinyin_capital(substr(e.fullname,1,1)) = 'z'  
    17. group by e.expert_id,e.eperson_id,e.fullname  
    18. order by nlssort(e.fullname,'NLS_SORT=SCHINESE_PINYIN_M')  

    转自:http://zheng12tian.iteye.com/blog/817571

  • 相关阅读:
    Unity The Method Signature Matching Rule
    Unity The Property Matching Rule
    Unity The Type Matching Rule
    Unity The Custom Attribute Matching Rule
    Unity The Member Name Matching Rule
    Unity No Policies
    Unity The Return Type Matching Rule
    Unity The Parameter Type Matching Rule
    Unity The Namespace Matching Rule
    关于TSQL递归查询的(转)
  • 原文地址:https://www.cnblogs.com/likeju/p/5081657.html
Copyright © 2011-2022 走看看