日期:2014-05-16  浏览次数:20666 次

数据库中文字段排序语句
中文按照拼音字母排序

  • 1.1 使用 Oracle 数据库 数据库,可以使用以下方法:

引用
使用 Oracle 数据库,可以使用以下方法: nlssort()这个是函数,stock_holder 是字段名


//-- 按拼音排序 (系统默认) 
select * from T_0303003 order by nlssort(stock_holder,'NLS_SORT=SCHINESE_PINYIN_M'); 

/**
微软用户1]: 批注 [微软用户 nlssort()这个是 微软用户 函数,stock_holder 是字段名 重要的一点:这个是 SQL 语句, 如果是在 Hibernate 中写 HQL 语句。 这个函数 Hibernate 中也能支持。 。
*/

//-- 按部首排序 
select * from T_0303003 order by nlssort(stock_holder,'NLS_SORT=SCHINESE_RADICAL_M'); 

//-- 按笔画排序 
select * from T_0303003 order by nlssort(stock_holder,'NLS_SORT=SCHINESE_STROKE_M'); 




  • 1.2 使用 Mysql 数据库:


引用
如果在数据端使用排序直接用 order by 即可.
如果数据库是使用 UTF-8 则使用下面这个语句:



select name from test1order by convert(name using gb2312) desc; 
// 如果使用了 MySQL 数据库而又需要中文排序,则先把数据取出来再程序中排序.
// 如: 先定义: 
Comparator demo = new Comparator(){
    public int compare(Object arg0, Object arg1) {
        return Collator.getInstance(Locale.CHINESE).compare(arg0, arg1);
    }
};
Collections.sort(list,demo); 


/**
微软用户2]: 批注 [微软用户 数据库编码必须 微软用户 是 GBK 
微软用户3]: 批注 [微软用户 Convert 是 MySQL 微软用户 数据库的方法,name 是字段名 但是 Hibernate 不支持此方法… 
微软用户4]: 批注 [微软用户 获得需要比较的 微软用户 语种 
微软用户5]: 批注 [微软用户 Compare 方法比较 微软用户 出来的结果:大于 0、等于 0、小于 0 
微软用户6]: 批注 [微软用户 此方法后你需要 微软用户 排序的 list 容器就按照上文的内部匿 名函数规则排序: list 就是需要中文排序的容器,demo 就是上文定义的内部函数(java 自带 的) ,list 中只能是字符或是字符串、 数字,不能是对象,对象容器需要转 换(有待研究).. 
*/



  • 1.3使用SQL Server数据库:

引用
使用 直接order by (数据库可以排序,使用 数据库可以排序,使用HQL语句时需要测试。。 语句时需要测试。 直接 语句时需要测试 。)



select * from collate dbo.tbl_aqjg_hidden_info t order by t.info_type3;

/**
Chinese_PRC_CS_AS_KS_WS collate 是关键字,Chinese_PRC_CS_AS_KS_WS是排序规则: 摘抄于网页中) 是关键字, 是排序规则: (摘抄 是排序规则 (摘抄于网页中)前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。 

排序规则的后半部份即后缀 含义: _BIN 二进制排序 _CI(CS) 是否区分大小写,CI不区分,CS区分 _AI(AS) 是否区分重音,AI不区分,AS区分 _KI(KS) 是否区分假名类型,KI不区分,KS区分 _WI(WS) 是否区分宽度 WI不区分,WS区分 区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。 

区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项, 比较还将重音不同的字母视为不等。 

区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。 区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项。
*/




来源:网络