900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > MySQL获取汉字的拼音首字母

MySQL获取汉字的拼音首字母

时间:2022-06-19 22:11:54

相关推荐

MySQL获取汉字的拼音首字母

目录

一、函数二、执行遇到问题三、如何使用四、常见的函数

一、函数

这里是通过函数调用进行获取汉字的拼音首字母。

DELIMITER $$CREATE FUNCTION `pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8DETERMINISTICBEGINDECLARE V_COMPARE VARCHAR(255);DECLARE V_RETURN VARCHAR(255);DECLARE I INT;SET I = 1;SET V_RETURN = '';#循环截取字符while I < LENGTH(P_NAME) doSET V_COMPARE = SUBSTR(P_NAME, I, 1);IF (V_COMPARE != '') THEN#字符串拼接SET V_RETURN = CONCAT(V_RETURN, to_frist_pinyin(V_COMPARE));END IF;SET I = I + 1;end while;IF (ISNULL(V_RETURN) or V_RETURN = '') THENSET V_RETURN = P_NAME;END IF;RETURN V_RETURN;END$$CREATE FUNCTION `to_frist_pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8BEGINDECLARE V_RETURN VARCHAR(255);DECLARE V_FIRST_CHAR VARCHAR(255);#这块主要意思是假如传入的是英文串的话,只取首字母set V_FIRST_CHAR =UPPER(LEFT(CONVERT(P_NAME USING gbk),1));set V_RETURN = V_FIRST_CHAR;#如果是这些特殊符号,直接返回#IF V_FIRST_CHAR in ('(',')','《','》')THEN SET V_RETURN = '';#两个不相等只有一个情况,V_FIRST_CHAR是中文汉字或者中文符号。elseif LENGTH( V_FIRST_CHAR) <> CHARACTER_LENGTH( V_FIRST_CHAR )thenSET 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');#如果是下面的直接原样输出elseif V_FIRST_CHAR in ('A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','*','+','-','=','/','\\','{','}','[',']','(',')','(',')')then SET V_RETURN = V_RETURN;#其他的输出#else SET V_RETURN = '#';END IF;#为空的话输出#RETURN IFNULL(V_RETURN,'#');END$$DELIMITER ;

二、执行遇到问题

设置为1,创建完后,可以再设置回去。

set global log_bin_trust_function_creators = 1;

简单介绍一下,当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。

三、如何使用

将某个表当中的按照名称给pym字段赋值。

UPDATE therapy_standard a SET name_pym = pinyin ( NAME );

SELECT pinyin ( '张三abc' );

四、常见的函数

1、CONVERT()提供一个在不同字符集之间转换数据的方法。

用法:CONVERT('张' USING gbk)

2、LEFT()函数是一个字符串截取函数,它返回具有指定长度的字符串的左边部分。

用法:LEFT(Str,length)

str:一个字符串;length:想要截取的长度,是一个正整数;

注意这里的length是字符,也就是不管str包含的是汉字还是数字或者是字母都算是一个字符。

3、upper()函数将所有字符串更改为大写,然后返回。

4、LENGTH()函数:查看某字符串的长度,这里的单位是字节。

utf8编码下,一个汉字三个字节,一个数字或字母一个字节。gbk下,一个汉字两个字节,一个数字或字母一个字节。

5、CHARACTER_LENGTH()函数:函数返回字符串的长度,单位为字符。

不管汉字还是数字或者是字母都算是一个字符

6、HEX()函数:返回十六进制值的字符串表示形式。注意:并不是十进制转化为十六进制数,而是转化为字符串。。。

7、UNHEX()函数: 每对十六进制数字转化为一个字符。

8、conv()函数:这个函数是用来将字符转换进制的,例如将a转成ASCII码(换个说法就是将16进制的a换成10进制)那就直接用conv(hex(‘a’),16,10)

9、INTERVAL()函数:用法INTERVAL(N,N1,N2,N3,…),其中,N是要判断的数值,N1,N2,N3,…是分段的间隔。

SELECT id,percent,INTERVAL(percent,25,50) from test;

意思大概是这样的:percent字段参与判断,设定的区段是25,50,那么小于25的值返回0,大于等于25小于50的值返回1,大于等于50的值返回2。

10、INTERVAL关键字:查询当前时间之前2个小时的日期:SELECT NOW()-INTERVAL '2' HOUR;

11、ELT()函数:ELT(N,str1,str2,str3,…)

如果N = 1,则返回str1;如果N = 2,则返回str2,依此类推。 如果N小于1或大于参数个数,则返回NULL。 ELT是FIELD的补充。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。