SQL语句实现字段汉字内容排序

问题

​ 有时候我们会遇到需求查询数据库中的某些字段然后根据某个字段排序例如根据姓名排序,但是姓名字段中有英文中文也有的姓名字段既包括中文也包括英文那么如果都使用 ORDER BY 进行排序会有什么不一样的结果?让我们测试一下。

一、字段内都是英文内容排序

场景一:

​ 当姓名字段都是英文时根据姓名字段排序,例如下面数据根据 first_name 升序排序

在这里插入图片描述

SQL语句

SELECT *
FROM employees
ORDER BY first_name ASC

结果集:

在这里插入图片描述

这里可以看见排序已经生效,结果集是按照 first_name 字段进行的排序

二、字段内都是中文内容排序

场景二:

​ 当姓名字段都是中文时根据姓名字段排序,例如下面数据根据 first_name 升序排序
在这里插入图片描述

SQL语句

SELECT *
FROM emoployees_all_chinese
ORDER BY first_name ASC

​ 结果集:
在这里插入图片描述

可以看见如果依然按照之前的规则编写SQL那么内容如果都是中文汉字的 first_name 字段排序是没有生效的(顺序有变但是不仔细看看不出来有任何规律,至少没有按照我们预想的顺序排序)

场景解决方案

SELECT *
FROM emoployees_all_chinese
ORDER BY CONVERT(first_name USING gbk) ASC

这里我们在含有中文字段外面包了一层 CONVERT( ‘字段名’ USING gbk)

结果集:
在这里插入图片描述

可以看见这里已经按照预想的顺序进行排序,也就是说 ORDER BY 语句根据内容都是中文的字段进行排序已经生效

三、字段内既有中文又有英文内容排序

同样的如果使用以下 SQL 语句

SELECT *
FROM emoployees_eng_cn
ORDER BY CONVERT(first_name USING gbk) ASC

结果集会先输出英文名称升序排序然后输出中文名称升序排序,这里就不贴图了,大家脑补一下,谢谢

扩展

我想了一下如果先输出中文升序排序然后输出英文升序排序或者中文倒叙英文倒叙或者其他顺序等等,如何实现这种排序,目前我还没有测试成功,代码层面可以通过流的方式处理,但SQL语句方面我无法实现,希望各位ikun实现了的能来指导我一下。

声明

本人是一个菜坤,在此只想记录一下,如果有什么错误的地方请及时联系我,我怕让大家笑话。

编辑人:HahaCoder练习时长两年半)

编辑时间:2023年6月20日00:53:11

四、相关题解答的博客地址

mysql 中将汉字(中文)按照拼音首字母排序

MySQL汉字排序

让MySQL支持中文排序

数据库实现中文汉字排序终极指南

上面有一些网址相关问题解决方案,有的介绍很细致有的把 oracle 中文排序也讲了一下,有的我借鉴了一下,有的我也没看随便搜了一下,还有的我没有贴出来,总之网络上有很多教程ikun 们多动手。

原文地址:https://blog.csdn.net/qq_69927088/article/details/131298254

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_29032.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注