文档章节

mysql --中文转汉语拼音,取首字母

求是科技
 求是科技
发布于 2016/03/01 18:04
字数 622
阅读 105
收藏 17

直接上需求

1.地点表如下


原数据库表是没有FIRST_LETTER这个字段的。

需求:在原表的基础上增加一列,要求该列是字段LOCATION_NAME拼音的首字母。

直接上SQL

Select location_id,location_name ,
ELT(INTERVAL(CONV(HEX(left(CONVERT(location_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') as FIRST_LETTER 
FROM t_location

查出的结果如下


很明显如上的SQL可以满足需求

接着来分析如上SQL

第一步,对汉字进行编码,SQL如下

SELECT CONVERT(location_name USING gbk) FROM t_location

运行结果如下


第二步,取汉字(字符串)的第一个字,SQL如下

SELECT LEFT(CONVERT(location_name USING gbk),1) FROM t_location

运行结果如下


第三步,将第一个汉字转换成十六进制编码,SQL如下

SELECT HEX(LEFT(CONVERT(location_name USING gbk),1)) FROM t_location

运行结果如下


第四步,将十六进制转成十进制,SQL如下

SELECT CONV(HEX(LEFT(CONVERT(location_name USING gbk),1)),16,10) FROM t_location

运行结果如下


第五步,SQL如下,

SELECT INTERVAL(CONV(HEX(LEFT(CONVERT(location_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) FROM t_location

不知道如下这些数字有什么用

0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,
0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1

懂mysql中interval()函数的用法,但是不明白用在这里是什么意思。

运行结果如下


第六步,SQL如下

SELECT location_id,location_name,ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(location_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')  FROM t_location

运行结果如下

这一步中,mysql的函数elt()意思明白。

总结:这次转换流程第五步不明白,望高手见到了此帖子,指点一下!

补充:如上完成的是根据t_location表查询出该字段,但是该字段并不存在于t_location表中。如下操作是使该字段存在于t_location表中。

步骤1:很明显,给t_location表增加一个字段:first_letter。图如下


步骤2:写SQL

UPDATE t_location 
INNER JOIN(
Select location_id,location_name ,
ELT(INTERVAL(CONV(HEX(left(CONVERT(location_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') as firstLetter 
FROM t_location) tl
ON tl.location_id = t_location.location_id
set t_location.first_letter = tl.firstLetter

该SQL实际上是在上述第一个模块中的第5步添加了更新。



© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 91
博文 439
码字总数 226317
作品 0
成都
后端工程师
私信 提问
一个汉字转拼音的插件(pinyin4j)

今天看到一个拼音插件,输入汉字后会自动转换为拼音或者每个字的首字母,在做有些项目开发时也有点用 pinyin4j提供了汉语转拼音的一个开源库, 支持多种拼音系统:汉语拼音、 通用拼音 、威氏...

长平狐
2012/10/09
210
1
汉字拉丁化的历史

昨天,我写了拉丁字母的历史,今天我接着做一些汉字拉丁化的笔记。 汉字拉丁化的历史已有200年了。 1815年,英国人马礼逊(R.Morrison)出版了中英对照的《中文字典》,第一次提出了一个用英...

阮一峰
2007/06/14
0
0
中文词典开源项目--CC-CEDICT

CC-CEDICT 是一个中文词典开源项目,提供一份以汉语拼音为中文辅助的汉英辞典,截至2009年2月8日,已收录82712个单词。其词典可以用于中文分词使用,而且不存在版权问题。Chrome中文版就是使...

红薯
2013/11/28
1K
0
程序员,请你使用中文

程序员,如果你不精通英文,请你使用中文; 程序员,如果你精通英文,请你使用中文; 程序员,东方人不反对你使用汉语拼音; 程序员,人们不反对你使用字母文字编程,但注释请使用中文; 程序...

花和尚鲁智深
2015/08/07
1K
11
汉语拼音密码安全性

汉语拼音密码安全性 昨天群里有人讨论使用汉语拼音构建长密码,认为比较安全。但实际是真的很安全吗? 汉语拼音大约有410-420种,为了计算方便,取最大值420。例如对于拼音密码daxueba进行分...

大学霸
2016/12/14
29
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么要学习Python?这10个理由足够了!

摘要: 看完这十个理由,我决定买本python从入门到精通! 如果你定期关注现今的科技发展,那么你可能想知道我为什么要写这篇文章告诉人们学习Python?因为几年前我提倡Java而不是Python。 在...

阿里云官方博客
17分钟前
2
0
spring服务方式配置okhttp3

问题 如果把OKhttp以Spring服务方式配置,就解决了从配置中心运行时刷新配置参数的问题。 OkHttpConfig.java package com.zyl.config;import okhttp3.OkHttpClient;import org.springfra...

亚林瓜子
18分钟前
2
0
8张图让你一步步看清 async/await 和 promise 的执行顺序

**摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有。 为什么写这篇文章? 说实话,关于js的异步执行顺...

Fundebug
18分钟前
1
0
Linux 命令菜单

#!/bin/bash #menu.sh menu(){ source ~/.bashrc echo "=================================" echo "Please enter your choise:" echo "(0) Kill all java" echo "(1) Start all tomcat" echo......

mellen
24分钟前
3
0
原来云数据库也是有思想的...

本文由一刻talks发表 邵宗文,腾讯云数据库专家副总监。十余年数据库从业经验,2009年加入腾讯,曾负责腾讯网,新闻客户端,快报,视频,财经,体育等数据库平台部署、规划及运维支持工作。本...

腾讯云加社区
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部