文档章节

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

求是科技
 求是科技
发布于 2016/03/01 18:04
字数 622
阅读 100
收藏 17
点赞 1
评论 0

直接上需求

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步添加了更新。



© 著作权归作者所有

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

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

长平狐 ⋅ 2012/10/09 ⋅ 1

汉字拉丁化的历史

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

阮一峰 ⋅ 2007/06/14 ⋅ 0

中文词典开源项目--CC-CEDICT

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

红薯 ⋅ 2013/11/28 ⋅ 0

SQL 中文转拼音

获取中文首字母 create function f_GetPinYin(@str varchar(500)) returns varchar(500) as begin declare @cyc int,@length int,@str1 varchar(100),@charcate varbinary(20) set @cyc=1--从......

开源中国首席老王 ⋅ 2014/10/27 ⋅ 2

汉语拼音密码安全性

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

大学霸 ⋅ 2016/12/14 ⋅ 0

Citavi这个软件有没有中文版?

Citavi这个软件有没有中文版? 我现在用的是英文版的,通过ISBN添加的中文书籍,书籍信息没法正常显示中文(显示汉语拼音),请问怎样才能显示中文呢?

lishuo ⋅ 2012/02/20 ⋅ 1

汉语拼音转换工具--python-pinyin

Python-pinyin 能将汉语转为拼音。可以用于汉字注音、排序、检索。 基于 hotoo/pinyin 开发。 Python version: 2.6, 2.7, pypy, 3.3, 3.4 特性 根据词组智能匹配最正确的拼音。 支持多音字。...

mozillazg ⋅ 2015/03/13 ⋅ 0

平台资源表 表和表字段的命名规范——JEPLUS软件快速开发平台

JEPLUS平台资源表和表字段的命名规范 规范性的东西其实都是约定俗成的,你不按规范来写并非不可以,但是不按照规范来写代码的可阅读性就很差,简单来说就是你看的懂我们看不懂,时间久了之后...

JEPLUS ⋅ 06/13 ⋅ 0

让ShartDevelop的[自动完成列表]支持中文变量名拼音首字母匹配

一直以来就十分怀念当年用易语言的时候可以使用中文变量名——自动完成的时候按拼音首字母就可以了。 虽然这几年习惯了用英文变量名,但总是有点怀旧情结。昨天闲极无聊,把SharpDevelop 的源...

帆船 ⋅ 2013/01/26 ⋅ 3

Vim 中文输入法--VimIM

VimIM 是专为 vim 玩家开发的插件,可作为 vim 内嵌中文输入法。只要您的 vim 能显示中文,您就能用 vim 输入搜索中文。VimIM 把 vim 的中文编辑潜能,提升到一个全新的高度。 VimIM 部分特点...

匿名 ⋅ 2009/11/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 16分钟前 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 36分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 49分钟前 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部