sql语句为:
select id,dict_name,type_code from t_dictionary where type_code='GRADE' ORDER BY `dict_name`;
排序效果如下:
因为字符串排序是先比较字符串第一个字符的大小。而不是像int型比较整个数字的大小。要想用字符串数据排成整型排序的效果,可以采用如下三种方式:
select id,dict_name,type_code from t_dictionary where type_code='GRADE' ORDER BY `dict_name`*1;
select id,dict_name,type_code from t_dictionary where type_code='GRADE' ORDER BY dict_name+0;
select id,dict_name,type_code from t_dictionary where type_code='GRADE' ORDER BY CAST(dict_name AS DECIMAL);
效果图均为:
记录下来,收获感比较强,积累成就感。
若还有其他的实现方式,可以留言交流~~
参考文章:
https://www.cnblogs.com/yako/archive/2012/03/01/2375584.html
http://database.51cto.com/art/201011/235318.htm
mysql中对字符串排序,字符串中有数字有汉字,想按数字的大小来进行排序。仅仅用order by排序,效果不是想要的。 sql语句为:select id,dict_name,type_code from t_dictionary where type_code='GRADE' ORDER BY `dict_name`; 排序效果如下:
MySQL
对中文进行
排序
详解
MySQL
默认只支持对日期、时间和英文
字符串
进行
排序
,如果对中文进行order by很可能得不到想要的结果,如下面的查询并不会按我们所想的根据汉字的拼音进行
排序
:
SELECT * from user order by user_name;
如果相对中文进行
排序
的话,可以使用CONVERT(coloum_name USING GBK)将中文转为GBK编码形式,然后再
排序
,就可以实现根据汉子的拼音进行
排序
:
SELECT * from user order by CONVERT(user_name USING GBK);
感谢阅读,希望能帮助到大家,谢谢大家对本
如果所有参数均为非二进制
字符串
,则结果为非二进制
字符串
。
如果自变量中含有任一二进制
字符串
,则结果为一个二进制
字符串
。
一个数字参数被转化为与之相等的二进制
字符串
格式;若要避免这种情况,可使用显式类型 cast, 例如:
SELECT CONCAT(CAST(int_col AS CHAR), char_col)
MySQL
的concat函数可以连接一个或者多个
字符串
,如
mysql
> select concat('10');
+--------------+
| concat('10') |
+--------------+
| 10 |
+--------------+
1 row in set (0.00 sec)
mysql
> select concat('11','22','33');
+------------------------+
| concat('11','22','33') |
+------------------------+
| 112233 |
+------------------------+
1 row in set (0.00 sec)
MySQL
的concat函数在连接
字符串
的时候,只要其中一个是NULL,那么将返回NULL
mysql
> select concat('11','22',null);
+------------------------+
| concat('11','22',null) |
+------------------------+
| NULL |
+------------------------+
1 row in set (0.00 sec)
MySQL
中concat_ws函数
使用方法:
CONCAT_WS(separator,str1,str2,...)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个
字符串
之间。分隔符可以是一个
字符串
,也可以是其它参数。
如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。
如连接后以逗号分隔
mysql
> select concat_ws(',','11','22','33');
+-------------------------------+
| concat_ws(',','11','22','33') |
+-------------------------------+
| 11,22,33 |
+-------------------------------+
1 row in set (0.00 sec)
和
MySQL
中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL
mysql
> select concat_ws(',','11','22',NULL);
+-------------------------------+
| concat_ws(',','11','22',NULL) |
+-------------------------------+
| 11,22 |
+-------------------------------+
1 row in set (0.00 sec)
MySQL
中group_concat函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC
排序
字段] [Separator '分隔符'])
mysql
> select * from aa;
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔(默认)
mysql
> select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,分号分隔
mysql
> select id,group_concat(name separator ';') from aa group by id;
+------+----------------------------------+
| id| group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500 |
+------+----------------------------------+
3 rows in set (0.00 sec)
以id分组,把去冗余的name字段的值打印在一行,
mysql
> select id,group_concat(distinct name) from aa group by id;
+------+-----------------------------+
| id| group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20|
|2 | 20 |
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序
mysql
> select id,group_concat(name order by name desc) from aa group by id;
+------+---------------------------------------+
| id| group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
repeat()函数
用来复制
字符串
,如下'ab'表示要复制的
字符串
,2表示复制的份数
mysql
> select repeat('ab',2);
+----------------+
| repeat('ab',2) |
+----------------+
| abab |
+----------------+
1 row in set (0.00 sec)
mysql
> select repeat('a',2);
+---------------+
| repeat('a',2) |
+---------------+
| aa |
+---------------+
1 row in set (0.00 sec)
mysql
向表中某字段后追加一段
字符串
:
update table_name set field=CONCAT(field,'',str)
mysql
向表中某字段前加
字符串
update table_name set field=CONCAT('str',field)
这个函数对你也许会有很大帮助哦!!
任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何
排序
呢?决定字符
排序
的规则就是
排序
规则。
查看内置字符集与比较规则
通过show charset;命令,可以查看所有的字符集。
以下仅展示了我们常用的字符集:
+----------+---------------------------------+---------------------+--------+
| Charset | Descrip
本篇博客主要记录
mysql
当中关于创建数据库时候选择:字符集、
排序
规则等相关知识。通过示例直观的看出其真正作用。
目录1、前言2、
mysql
字符集2、
排序
规则2.1、
排序
规则作用2.2、
排序
测试2.2.1、utf_bin示例2.2.2、utf_general_ci示例2.3、
排序
规则设置及优先级2.3.1、
MySQL
实例级别设置2.3.2、库级别设置2.3.3、表级别设置2.3.4、列级别设置2.3.5、SQL指定设置
在创建数据库的时候会让我们去选择字符集和
排序
规则,有很多人对这方面不是很了解,
Mysql
实现字符位数及字符大小升序
排序
当我们需要对某一字段进行升序
排序
的时候,如果这个字段是字符类型的数据,
排序
时会去逐位比较字符,例如:
'1234’和’21’两个
字符串
,按照惯性思维,肯定是’21’排在前面,但是由于字符类型数据比较时会逐位比较,所以,应当是‘1234’排在前面。那么,怎么才能让‘21’排在前面呢?
有两种实现方式:
一、先进行位数
排序
,再进行字符
排序
。
select di...
ORDER BY case
WHEN spec_array like '%str_01%' then 1
WHEN spec_array like '%str_02%' then 2
WHEN spec_array like '%str_03%' then 3
...
在
MySQL
中,
字符串
排序
是基于字符的 ASCII 值进行的。默认情况下,
MySQL
使用字典顺序进行
字符串
排序
。下面是一些示例代码来演示如何对
字符串
进行
排序
:
```sql
-- 创建一个示例表
CREATE TABLE users (
id INT,
name VARCHAR(50)
-- 插入示例数据
INSERT INTO users (id, name) VALUES (1, 'John');
INSERT INTO users (id, name) VALUES (2, 'Alice');
INSERT INTO users (id, name) VALUES (3, 'Bob');
INSERT INTO users (id, name) VALUES (4, 'Charlie');
-- 按照名称升序
排序
SELECT name
FROM users
ORDER BY name ASC;
上面的代码创建了一个名为 "users" 的表,并插入了一些示例数据。然后,使用 `ORDER BY` 子句按名称升序
排序
查询结果。
结果应该如下所示:
+--------+
| name |
+--------+
| Alice |
| Bob |
| Charlie|
| John |
+--------+
需要注意的是,
字符串
排序
是区分大小写的。大写字母会在小写字母之前排列。如果你想要进行自定义
排序
(例如按照特定的顺序或规则),可以使用 `ORDER BY FIELD()` 函数或者 `CASE` 表达式来实现。