首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中按汉语拼音对列进行排序的便携方式

rails中按汉语拼音对列进行排序的便携方式
EN

Stack Overflow用户
提问于 2011-02-10 21:48:03
回答 2查看 1.1K关注 0票数 1

有没有一种可移植的方法来根据rails中的中文拼音(汉语拼音)使用Activerecord或标准SQL语句对列进行排序,而不管底层的数据库配置。如果这不可能,那么在postgresql上执行它推荐方法是什么?

Heremysql数据库提供了一种以gb2312为字符集的方法。

代码语言:javascript
复制
    SQL code

        mysql> create table t_cosler( 
             -> f_PY char primary key, 
             -> cBegin SMALLINT UNSIGNED not null, 
             -> cEnd SMALLINT UNSIGNED not null -> ); 
        Query OK, 0 rows affected (0.09 sec) 

        mysql> insert into t_cosler values 
        -> ('A',0xB0A1,0xB0C4), 
        -> ('B',0xB0C5,0xB2C0), 
        -> ('C',0xB2C1,0xB4ED), 
        -> ('D',0xB4EE,0xB6E9), 
        -> ('E',0xB6EA,0xB7A1), 
        -> ('F',0xB7A2,0xB8C0),  
        -> ('G',0xB8C1,0xB9FD), 
        -> ('H',0xB9FE,0xBBF6), 
        -> ('J',0xBBF7,0xBFA5),  
        -> ('K',0xBFA6,0xC0AB), 
        -> ('L',0xC0AC,0xC2E7), 
        -> ('M',0xC2E8,0xC4C2), 
        -> ('N',0xC4C3,0xC5B5), 
        -> ('O',0xC5B6,0xC5BD), 
        -> ('P',0xC5BE,0xC6D9), 
        -> ('Q',0xC6DA,0xC8BA), 
        -> ('R',0xC8BB,0xC8F5), 
        -> ('S',0xC8F6,0xCBF9), 
        -> ('T',0xCBFA,0xCDD9), 
        -> ('W',0xCDDA,0xCEF3), 
        -> ('X',0xCEF4,0xD188), 
        -> ('Y',0xD1B9,0xD4D0), 
        -> ('Z',0xD4D1,0xD7F9);

         Query OK, 23 rows affected (0.16 sec) Records: 23 Duplicates: 0 Warnings: 0 
        mysql> select * from o_personnel;
        +------+------------+ 
        | A_Id | A_UserName | 
        +------+------------+ 
        | 1 | 首先 | 
        | 2 | 检查 | 
        | 3 | 我们 | 
        | 4 | 的二 | 
        | 5 | 进制 | 
        | 6 | 是否 | 
        | 7 | 适合 | 
        | 8 | 你的 | 
        | 9 | 平台 | 

        +------+------------+ 9 rows in set (0.00 sec) 
     mysql> select p.*,c.*
    -> from o_personnel p , t_cosler c
    -> where  CONV(HEX(left(A_UserName,1)),16,10) between c.cBegin and c.cEnd;

+------+------------+------+--------+-------+
| A_Id | A_UserName | f_PY | cBegin | cEnd  |
+------+------------+------+--------+-------+
|    4 | 的二       | D    |  46318 | 46825 |
|    2 | 检查       | J    |  48119 | 49061 |
|    5 | 进制       | J    |  48119 | 49061 |
|    8 | 你的       | N    |  50371 | 50613 |
|    9 | 平台       | P    |  50622 | 50905 |
|    1 | 首先       | S    |  51446 | 52217 |
|    6 | 是否       | S    |  51446 | 52217 |
|    7 | 适合       | S    |  51446 | 52217 |
|    3 | 我们       | W    |  52698 | 52979 |
+------+------------+------+--------+-------+
9 rows in set (0.00 sec)

mysql>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-11 17:53:07

为了解决这个问题,我刚刚编写了一个gem toPinyin,简称为gem install toPinyin

代码语言:javascript
复制
require 'toPinyin'
words = "
检查
我们
的二
进制
是否
适合
你的
平台".split("\n")

words.sort! {|a ,b|   a.pinyin.join <=> b.pinyin.join }
票数 1
EN

Stack Overflow用户

发布于 2011-02-11 00:23:09

我将冒险说“不,不管使用SQL的数据库配置如何”。我不确定是什么控制了Rails排序。

SQL数据库管理系统中的排序顺序由排序规则控制。根据dbms的不同,您可以在服务器、数据库、表或列级别设置排序规则。而且,根据dbms的不同,您甚至可以指定运行时在查询中使用的排序规则。

我非常确定SQL Server支持所有这些级别。PostgreSQL不需要。我不知道MySQL怎么样。

要对拼音进行排序,请选择适当的排序规则。(我不知道哪一个合适。)在PostgreSQL文档中,一些细节在“Locale Support”下--而不是在“排序规则”下。

我不确定ruby在多大程度上依赖于操作系统的任何东西--区域设置、代码页、字符编码--来进行自己的排序。但如果它依赖于操作系统的任何东西,我不得不说它可能不是100%可靠的。(因为不同操作系统下的不同实现可能会产生略有不同的结果。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4957857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档