利用MySQL数据库来处理中英文取首字母排序

很久都没有写博客了, 但是也积攒了了很多的问题, 下次找个时间一起整理一下, 然后记录下来, 以备不时之需.

我们的联系人列表经常会有按照首字母排序的需求.  这个很方便, 很清晰, 如果不说性能如何, 就像让数据库来做呢? 其实MySQL是支持的.

我们建立一个函数:

DELIMITER $$
CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
DETERMINISTIC
BEGIN
    DECLARE V_RETURN VARCHAR(255);
    DECLARE V_BOOL INT DEFAULT 0;
          DECLARE FIRST_VARCHAR VARCHAR(1);

    SET FIRST_VARCHAR = left(CONVERT(P_NAME USING gbk),1);
    SELECT FIRST_VARCHAR REGEXP ‘[a-zA-Z]‘ INTO V_BOOL;
    IF V_BOOL = 1 THEN
      SET V_RETURN = FIRST_VARCHAR;
    ELSE
      SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME USING gbk),1)),16,10),
          0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
          0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,
          0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
      ‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘J‘,‘K‘,‘L‘,‘M‘,‘N‘,‘O‘,‘P‘,‘Q‘,‘R‘,‘S‘,‘T‘,‘W‘,‘X‘,‘Y‘,‘Z‘);
    END IF;
    RETURN V_RETURN;
END$$
DELIMITER;

然后我们执行SQL

select intermediary_id, intermediary_name, fristPinyin(intermediary_name) as fristPinyin
from t_second_agent_intermediary
where city_id = 1337  and intermediary_type = ‘zj‘
ORDER BY fristPinyin ;

看一下结果:

我觉得还行, 挺方便地.

时间: 2024-10-26 10:35:04

利用MySQL数据库来处理中英文取首字母排序的相关文章

Java编程实现中英混合字符串数组按首字母排序的方法

在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: ? 1 2 3 4 5 6 7 String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反对高铁"

关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案

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

数据库中获取汉字的首字母(网上某大神的)

create function fun_getPY(@str nvarchar(4000))returns nvarchar(4000)asbegindeclare @word nchar(1),@PY nvarchar(4000)set @PY=''while len(@str)>0beginset @word=left(@str,1)--如果非汉字字符,返回原字符set @[email protected]+(case when unicode(@word) between 19968 an

sql 汉字按照首字母排序

SQL mysql 我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order by关键字正确排序. 经过网上查找,网上的办法大多是针对使用utf8字符集的数据库,主要的方法有: 1)直接转换字段为gbk,数据表某字段client_name的字符编码是utf8_general_ci; 比如: SELECT  *  FROM  `client_info_msg

php按照中文首字母排序

1> 网络上很多php的工具类可以将汉字转为拼音: 2> 将拼音进行排序即可 另一种则是类似mysql转码方式: 1 foreach ($array as $key=>$value) 2 { 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value); 4 } 1 foreach ($array as $key=>$value) 2 { 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value);

Oracle 10g如何对用户姓名,按首字母排序、查询

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

中文首字母 排序

因项目需要对通讯录中的联系人进行排序,需要对中文字符进行拼音转换.其实这个转换并没有想象中的那么难(因为我们只是把中文转为拼音首字母而已,比如“王”转换为字母w就可以了,而不需要转换为完整的拼音wang).对此,我们找到了一个简便的解决办法:一个老外(代码中签名的作者叫George)用c语言写了一个pinyinFirstLetter函数用于获取中文拼音首字母. 这个函数主要基于一个巨大的c语言char数组,把unicode字符集中所有中文的拼音首字母都映射进去了. pinyinFirstLett

ORACLE根据中文拼音首字母排序、取得中文拼音首字母函数

根据中文拼音首字母排序.取得中文拼音首字母函数     介绍根据中文的首字母.笔画.部首排序函数[NLSSORT]:           1).首字母           SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_PINYIN_M');           2).笔画     SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_STRO

三道习题(1、将单词表中由相同字母组成的单词归成一类,每类单词按照单词的首字母排序,并按 #每类中第一个单词字典序由大到小排列输出各个类别。 #输入格式:按字典序由小到大输入若干个单词,每个单词占一行,以end结束输入。)

#coding=gbk ''' 1.将单词表中由相同字母组成的单词归成一类,每类单词按照单词的首字母排序,并按 #每类中第一个单词字典序由大到小排列输出各个类别. #输入格式:按字典序由小到大输入若干个单词,每个单词占一行,以end结束输入. #cinema #iceman #maps #spam #aboard #abroad #end #输出格式:一类单词一行,类别间单词以空格隔开. #aboard abroad #cinema iceman #maps spam ''' result=[]