MySQL数据库获取汉字拼音的首字母函数

原文:MySQL数据库获取汉字拼音的首字母函数

需求简介:最近的一个项目,想实现如下图所示的显示效果。很明显,如果能够获取对应的汉字词组的拼音首字母就可以实现了,如果是固定的几个汉字,人为的拼一下就可以了,不过项目中有多处功能是需要这个效果的,并且事先也不知道对应的汉字是什么,所以就需要一个函数来完成这件事情了,根据网上查询的资料自己改进了一个函数实现的效果,现分享如下。

1:测试环境

     1-1:测试工具的信息

    

     1-2:测试数据库的信息

    

2:测试数据

     2-1:测试表的信息

    

     2-2:测试数据的信息

    

3:测试的功能

     测试的函数的功能为,根据汉字词组或者单个汉字,获取其对应的拼音首字母,比如:你爱我吗?获取的是 N ,如果是非汉字字符则不做处理。

4:函数的代码

DELIMITER $$

USE `test`$$

DROP FUNCTION IF EXISTS `getFirstHanZiCode`$$

CREATE DEFINER=`hjd`@`%` FUNCTION `getFirstHanZiCode`(in_string VARCHAR(100)) RETURNS VARCHAR(100) CHARSET utf8
BEGIN
#定义临时字符串变量,用于接收函数中传递进来的字符串值,这里是in_string
DECLARE tmp_str VARCHAR(100) CHARSET gbk DEFAULT '' ;
#定义临时字符串变量,用于存放函数中传递进来的字符串值的第一个字符
DECLARE tmp_char VARCHAR(2) CHARSET gbk DEFAULT '';
#tmp_str的长度
DECLARE tmp_loc SMALLINT DEFAULT 0;
#初始化,将in_string赋给tmp_str
SET tmp_str = in_string;
#获取tmp_str最左端的首个字符,注意这里是获取首个字符,该字符可能是汉字,也可能不是。
SET tmp_char = LEFT(tmp_str,1);
#获取字符的编码范围的位置,为了确认汉字拼音首字母是那一个
SET tmp_loc=INTERVAL(CONV(HEX(tmp_char),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);
#判断左端首个字符是多字节还是单字节字符,要是多字节则认为是汉字且作以下拼音获取,要是单字节则不处理。如果是多字节字符但是不在对应的编码范围之内,即对应的不是大写字母则也不做处理,这样数字或者特殊字符就保持原样了
IF (LENGTH(tmp_char)>1 AND tmp_loc>0 AND tmp_loc<24) THEN
SELECT ELT(tmp_loc,'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z') INTO tmp_char; #获得汉字拼音首字符
END IF;
RETURN tmp_char;#返回汉字拼音首字符
END$$

DELIMITER ;

 

5:函数的使用效果

    

6:函数的编写说明

    6-1:

   

    6-2:

   

    6-3:

   

    6-4:

   

   6-5:

  

7:函数的使用简介

7-1:函数LEFT(str,len)
        函数使用说明:返回从字符串str最左边开始的len个字符

 

7-2:函数 HEX(N_or_S )
        函数使用说明:如果N_OR_S 是一个数字,则返回一个十六进制值 N 的字符串表示,在这里, N 是一个longlong (BIGINT) 数。                             这相当于CONV(N,10,16) 。如果N_OR_S 是一个字符串,则返回值为一个N_OR_S 的十六进制字符串表示,其中每个N_OR_S 里的每个字符被转化为两个十六进制数字。

 

7-3:函数CONV(N, from_base, to_base)
        函数使用说明:不同数基间转换数字。返回值为数字的 N 字符串表示,由 from_base 基转化为 to_base 基。如有任意一个参数为 NULL ,则返回值为 NULL 。自变量 N 被理解为一个整数,但是可以被指定为一个整数或字符串。最小基数为 2 ,而最大基数则为 36 。 IF to_base 是一个负数,则 N 被看作一个带符号数。否则, N 被看作无符号数。 CONV() 的运行精确度为 64 比特。

 

7-4:函数INTERVAL(N,N1,N2,N3,..........)
        函数使用说明:INTERVAL()函数进行比较列表(N1,N2,N3等等)中的N值。该函数如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等等。如果N为NULL,它将返回-1。列表值必须是N1<N2<N3的形式才能正常工作。

 

7-5:函数ELT(N,str1,str2,str3,...)
        函数使用说明:如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL

 

7-6:函数CONVERT(str USING gbk)

        函数使用说明:将 str这一列转换为GBK编码,通常是为了更好的支持中文

 

8:有用的字符编码在线资源

http://www.mytju.com/classCode/tools/encode_gb2312.asp

http://bm.kdd.cc/

http://www.atool.org/chinese2unicode.php

http://tool.oschina.net/hexconvert/

http://zd.diyifanwen.com/zidian/py/

 

 9:mySQL相关的参看资源

http://www.yiibai.com/mysql/mysql_function_interval.html

http://www.cnblogs.com/kissdodog/p/4168721.html

http://www.cnblogs.com/cocos/archive/2011/05/06/2039469.html

时间: 2024-08-04 14:28:56

MySQL数据库获取汉字拼音的首字母函数的相关文章

wp手机开发之获取汉字拼音的首字母

今天介绍一种新的方法,使用codeplex上开源的项目GB2312 for Silverlight. 1.创建一个项目,命名为mangoGB2312 2.将GB2312 for Silverlight项目中的两个文件都拷贝至项目目录GB2312下,并且修改GB2312Encoding.cs的命名空间为mangoGB2312.GB2312,如下图所示 开发之获取汉字拼音的首字母 -js获取汉字拼音首字母"> 3.将gb2312.bin的生成方式修改为嵌入式资源,如下图 4.编写提取汉字首字母

ASP.NET 根据汉字获取汉字拼音的首字母(含多音字)_实用技巧

在很多时候,我们需要将汉字的拼音首字母存储到数据库,以便我们能通过首字母进行快速的查询,常见的有百度搜索,你只要输入拼音的首字母,就会出现相关的搜索的关键词,再比如一些办公系统中,查询一个人的姓名,为了简单方便,只输这个人的名字的首字母,就能快速检索. 话不多说,代码分享给大家: #region 获取汉字转换拼音 首字母 public string MkPinyinString(string HanZiStr) //获取汉字字符串的拼音首字母,含多音字 { int i, j, k, m; str

asp.net 获得汉字拼音的首字母

asp教程.net 获得汉字拼音的首字母 提供一个经典的获得汉字拼音的首字母函数,希望对各位的有用. public string GetPYChar(string c)         {             byte[] array = new byte[2];             array = System.Text.Encoding.Default.GetBytes(c);             int i = (short)(array[0] - '') * 256 + ((

在C#中取得汉字拼音的首字母的简单方法

问题解决思路:利用汉字在计算机里面的编码来的到汉字的首拼音. static public string GetChineseSpell(string strText) { int len = strText.Length; string myStr = ""; for(int i=0;i<len;i++) { myStr += getSpell(strText.Substring(i,1)); } return myStr; } static public string getS

java字符串获取汉字拼音首字母的实现方法

问题描述 java字符串获取汉字拼音首字母的实现方法 网上有很多方法可以通过汉字来获取汉字拼音的首字母,我要实现的是这个字符串当中 还包含了特殊符号,比如字符串为:省辖市属(地区.州.直辖市区),想要获得最终 结果为:SXSS(DQZZXSQ),请各位大侠支招 解决方案 按描述你对获取汉字首字母应该没问题, 对含特殊符号的字符串,可先提取其中的汉字,然后再获取拼音啊 public static String getChineseCode(String retCode){ Pattern patt

php获取汉字拼音首字母的函数(真正可以使用的

现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序.这是中国人大多数使用的排序方法.那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的,这个可是经过作者实践应用过的,真的可以使用的哦. //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){return '';} $fchar=ord($str{0}); if($fchar>=ord('A')

php获取汉字拼音首字母的方法_php技巧

现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序.这是中国人大多数使用的排序方法.那么在php程序中该如何操作呢? 下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的,这个可是经过小编实践应用过的,真的可以使用的哦. //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){return '';} $fchar=ord($str{0}); if($fchar>=ord('A'

DB2中创建一个获取汉字拼音首字母的SQL函数

有些时候我们会有这样的需求,要求使用字母从a至z对一组数据进行索引,如果数据的格式全部是半角的英文则很容易实现,但若是对一组中文数据进行索引则会引起一点小的麻烦,数据在录入数据库的时候可能并没有指定一个索引字母,这就要求应用程序可以自动生成用于索引的信息. 一般对于中文数据的索引,采用词组的首汉字拼音的首字母,例如: 词组 索引字母 --- ----- 熊猫 x 白暨豚 b 藏野驴 z 在DB2中并没有提供相应的函数可以取得汉字拼音的首字母,我们可以利用数据库针对中文字符集的排序功能创建一个这样

ASP.NET获取汉字拼音的第一个字母

asp.net|汉字|拼音 <script language="vbs" src="spellcode.vbs"></script> '获取客户简称的拼音缩写            function getpy()                 dim str                dim i                 str=document.all.txtContactName.value                d