亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL字符串按照數(shù)值排序方式

 更新時(shí)間:2023年08月25日 09:01:14   作者:JustDI-CM  
這篇文章主要介紹了MySQL字符串按照數(shù)值排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MySQL字符串按照數(shù)值排序

1.需求

MySQL 有個(gè)表字段設(shè)計(jì)的時(shí)候,設(shè)置為了 varchar 類型,存取的卻是數(shù)值,后續(xù)有業(yè)務(wù)需要按照此字段排序,獲取最大值。

按照最原始的排序語(yǔ)句為:

SELECT * FROM test_21 a ORDER BY a.testId desc;

結(jié)果為:

這個(gè)并不是想要的結(jié)果。

2.方法

改造一下

1)與 int 進(jìn)行計(jì)算

SELECT * FROM test_21 a ORDER BY a.testId+0 desc;
SELECT * FROM test_21 a ORDER BY a.testId-2 desc;
SELECT * FROM test_21 a ORDER BY a.testId*1 desc;
SELECT * FROM test_21 a ORDER BY a.testId/4 desc;

MySQL 的 varchar 與 int 計(jì)算時(shí),會(huì)轉(zhuǎn)換為 int。

以上4個(gè) sql 的執(zhí)行結(jié)果都為

2)cast() 或 convert()

SELECT * FROM test_21 a ORDER BY cast(a.testId as SIGNED) desc;
SELECT * FROM test_21 a ORDER BY convert(a.testId,SIGNED) desc;

這兩個(gè)函數(shù)都是用于格式轉(zhuǎn)換的,二者沒(méi)什么區(qū)別,

語(yǔ)法為:

CAST(expr AS type)
CONVERT(expr,type)

支持的類型有

說(shuō)明
DATE將expr轉(zhuǎn)換成’YYYY-MM-DD’格式
DATETIME將expr轉(zhuǎn)換成’YYYY-MM-DD HH:MM:SS’格式
TIME將expr轉(zhuǎn)換成’HH:MM:SS’格式
CHAR將expr轉(zhuǎn)換成CHAR(固定長(zhǎng)度的字符串)格式
SIGNED將expr轉(zhuǎn)換成INT(有符號(hào)的整數(shù))格式
UNSIGNED將expr轉(zhuǎn)換成INT(無(wú)符號(hào)的整數(shù))格式
DECIMAL將expr轉(zhuǎn)換成FLOAT(浮點(diǎn)數(shù))格式
BINARY將expr轉(zhuǎn)換成二進(jìn)制格式

結(jié)果都為:

MySQL按字符串?dāng)?shù)字排序處理

公司不知是誰(shuí)設(shè)計(jì)的表菜單排序字段竟然設(shè)置成了字符串。

CREATE TABLE `s_menu` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `PARENT_ID` int(11) DEFAULT NULL,
  `ORDER` varchar(5) DEFAULT NULL,
  `MENU_NAME` varchar(255) DEFAULT NULL,
  `MENU_URL` varchar(255) DEFAULT NULL,
  `MENU_ICON` varchar(100) DEFAULT NULL,
  `SORT_NUM` int(2) DEFAULT NULL,
  `IS_SHOW` int(2) DEFAULT NULL,
  `PERMISSION` varchar(100) DEFAULT NULL,
  `LOGIN_TYPE` int(11) DEFAULT NULL COMMENT '0:WEB,1:PC,2:APP',
  `CREATE_BY` int(11) DEFAULT NULL,
  `CREATE_DATE` date DEFAULT NULL,
  `MEMO` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=254 DEFAULT CHARSET=utf8 COMMENT='菜單';

為了減少代碼的改動(dòng)量 

SELECT
  `ID`,
  `PARENT_ID` ,
  `ORDER` ,
  `MENU_NAME`,
  `MENU_URL` ,
  `MENU_ICON` ,
  `SORT_NUM` ,
  `IS_SHOW` ,
  `PERMISSION` ,
  `LOGIN_TYPE` ,
  `CREATE_BY` ,
  `CREATE_DATE`,
  `MEMO` 
FROM
    s_menu
ORDER BY
      (s_menu.ORDER+0) ASC

將字符的數(shù)字轉(zhuǎn)成數(shù)字,比如"123"轉(zhuǎn)成123可以直接用字符數(shù)字+0來(lái)實(shí)現(xiàn)

也可以使用 cast(str as SIGNED)

SELECT
  `ID`,
  `PARENT_ID` ,
  `ORDER` ,
  `MENU_NAME`,
  `MENU_URL` ,
  `MENU_ICON` ,
  `SORT_NUM` ,
  `IS_SHOW` ,
  `PERMISSION` ,
  `LOGIN_TYPE` ,
  `CREATE_BY` ,
  `CREATE_DATE`,
  `MEMO` 
FROM
    s_menu
ORDER BY
      cast (s_menu.ORDER as SIGNED) ASC

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論