SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ;
SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID + 1);
mysql将字符串字段转为数字排序或比大小
2017年09月17日 01:36:31 阅读数:6566
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/superit401/article/details/78007969
mysql里面有个坑就是,有时按照某个字段的大小排序(或是比大小)发现排序有点错乱。后来才发现,是我们想当然地把对字符串字段当成数字并按照其大小排序(或是比大小),结果肯定不会是你想要的结果。
这时候需要把字符串转成数字再排序。
最简单的办法就是在字段后面加上+0
如把'123'转成数字123(以下例子全为亲测):
排序:
例:
方法一:ORDER BY '123'+0;(首推)
方法二:ORDER BY CAST('123' AS SIGNED);
方法三:ORDER BY CONVERT('123',SIGNED);
比大小:
例:
SELECT '123'+0; -- 结果为123
SELECT '123'+0>127; -- 结果为0
SELECT '123'+0>12; -- 结果为1
SELECT CAST('123' AS SIGNED); -- 结果为123
SELECT CONVERT('123',SIGNED)>127; -- 结果为0
SELECT CONVERT('123',SIGNED)>12; -- 结果为1
SELECT CAST('123' AS SIGNED); -- 结果为123
SELECT CAST('123' AS SIGNED)>127; -- 结果为0
SELECT CAST('123' AS SIGNED)>12; -- 结果为1
综合例子:
SELECT '123'+0>12 ORDER BY CONVERT('123',SIGNED); -- 结果为1
https://blog.csdn.net/github_39325328/article/details/79746103
mysql对字符型字段中的数字进行排序
github_39325328 2018-03-29 18:06:07 3293 收藏
分类专栏: mysql sql 文章标签: mysql GetNum() mysql对字符型字段中的数字进行排序
版权
mysql
同时被 2 个专栏收录
7 篇文章0 订阅
订阅专栏
sql
8 篇文章0 订阅
订阅专栏
场景:
按楼栋名称进行排序
比如有一套楼栋数据如下:
直接对楼栋名称进行order by是没有效果的,因为目标字段是字符型
思路:
获取楼栋名称中的数字,对数字进行排序
解决方案:
创建mysql函数 GetNum(field)
DELIMITER $$
CREATE FUNCTION GetNum (Varstring varchar(50))
RETURNS varchar(30)
BEGIN
DECLARE v_length INT DEFAULT 0;
DECLARE v_Tmp varchar(50) default '';
set v_length=CHAR_LENGTH(Varstring);
WHILE v_length > 0 DO
IF (ASCII(mid(Varstring,v_length,1))>47 and ASCII(mid(Varstring,v_length,1))<58 ) THEN
set v_Tmp=concat(v_Tmp,mid(Varstring,v_length,1));
END IF;
SET v_length = v_length - 1;
END WHILE;
RETURN REVERSE(v_Tmp);
END$$
DELIMITER ;
调用 GetNum(field) 函数,并没有实现按数字排序
原因是因为GetNum(field)得到的结果也是字符型,所以要+0转化为int类型实现排序
https://www.cnblogs.com/heyonggang/p/8117754.html
Mysql字符串截取总结:left()、right()、substring()、substring_index()
同步首发:https://yuanrengu.com/2020/9cfe2ad6.html
在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:left()、right()、substring()、substring_index()。
一.从左开始截取字符串
用法:left(str, length),即:left(被截取字符串, 截取长度)
SELECT LEFT('www.yuanrengu.com',8)
结果为:www.yuan
二.从右开始截取字符串
用法:right(str, length),即:right(被截取字符串, 截取长度)
SELECT RIGHT('www.yuanrengu.com',6)
结果为:gu.com
三.截取特定长度的字符串
用法:
- substring(str, pos),即:substring(被截取字符串, 从第几位开始截取)
- substring(str, pos, length),即:substring(被截取字符串,从第几位开始截取,截取长度)
1.从字符串的第9个字符开始读取直至结束
SELECT SUBSTRING('www.yuanrengu.com', 9)
结果为:rengu.com
2.从字符串的第9个字符开始,只取3个字符
SELECT SUBSTRING('www.yuanrengu.com', 9, 3)
结果为:ren
3.从字符串的倒数第6个字符开始读取直至结束
SELECT SUBSTRING('www.yuanrengu.com', -6)
结果为:gu.com
4.从字符串的倒数第6个字符开始读取,只取2个字符
SELECT SUBSTRING('www.yuanrengu.com', -6, 2)
结果为:gu
四.按关键字进行读取
用法:substring_index(str, delim, count),即:substring_index(被截取字符串,关键字,关键字出现的次数)
1.截取第二个“.”之前的所有字符
SELECT SUBSTRING_INDEX('www.yuanrengu.com', '.', 2);
结果为:www.yuanrengu
2.截取倒数第二个“.”之后的所有字符
SELECT SUBSTRING_INDEX('www.yuanrengu.com', '.', -2);
结果为:yuanrengu.com
3.如果关键字不存在,则返回整个字符串
SELECT SUBSTRING_INDEX('www.yuanrengu.com', 'sprite', 1);
结果为:www.yuanrengu.com