Mysql字符串截取 mysql将字符串字段转为数字排序或比大小
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個字符開始讀取直至結束
結果為: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
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Mysql字符串截取 mysql将字符串字段转为数字排序或比大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏本的配置?
- 下一篇: Python MySQL 插入表