如何在MySQL中按字符串中的數字排序

在管理數據庫時,我們經常遇到需要按嵌入在字符串中的數字進行排序的情況。這在實際應用中尤為常見,比如文件名、代碼版本號等字段中通常包含數字,而這些數字往往是排序的關鍵。本文將詳細介紹如何在MySQL中利用正則表達式提取字符串中的數字并按這些數字進行排序,以一個具體的例子來說明,使得即使是數據庫操作的初學者也能輕松理解和應用。

場景示例

假設你管理的數據庫中有一個表 sys_oss,它記錄了多媒體文件的信息。表中有一個字段 original_name,其中包含了文件的命名信息,格式大致為“中文_數字.mp4”。現在,我們的任務是按照文件名中的數字順序對這些記錄進行排序。

示例數據

讓我們先看幾個 original_name 的示例值:

  • 中文_1.mp4
  • 中文_12.mp4
  • 中文_2.mp4
  • 中文_10.mp4

如果按照字符串默認的排序方式,排序結果將會是:

  1. 中文_1.mp4
  2. 中文_10.mp4
  3. 中文_12.mp4
  4. 中文_2.mp4
    在這里插入圖片描述

這顯然不符合數字自然排序的邏輯,因為字符串排序是按字符編碼順序逐一比較的。我們的目標是按照數字部分的實際數值進行排序,即:

  1. 中文_1.mp4
  2. 中文_2.mp4
  3. 中文_10.mp4
  4. 中文_12.mp4
    在這里插入圖片描述
使用 REGEXP_SUBSTR 函數提取并排序

在MySQL 8.0及以上版本中,我們可以使用 REGEXP_SUBSTR() 函數來提取字符串中的數字部分。這個函數允許我們使用正則表達式來指定我們想要匹配的模式。在這個例子中,我們使用正則表達式 \\d+ 來匹配一個或多個數字。

以下是完整的SQL查詢,用于實現按數字排序:

SELECT *
FROM sys_oss
WHERE original_name LIKE '%中文%'
ORDER BY CAST(REGEXP_SUBSTR(original_name, '\\d+') AS UNSIGNED);

這條SQL語句做了以下幾件事:

  • WHERE original_name LIKE '%中文%':篩選出所有文件名包含“中文”的記錄。
  • REGEXP_SUBSTR(original_name, '\\d+'):從 original_name 中提取第一組連續的數字。
  • CAST(... AS UNSIGNED):將提取出的字符串轉換成無符號整數,以便按數字進行排序。
結論

使用 REGEXP_SUBSTR 提取數字并結合 CAST 函數轉換類型,使我們能夠按照數字的實際數值對字符串進行排序。這種技巧不僅適用于文件名,也可以廣泛應用于任何包含數字的字符串字段排序,如訂單編號、版本號等

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37316.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LiteDB - 一個單數據文件 .NET NoSQL 文檔存儲

LiteDB 一個小巧、快速、輕量級的 NoSQL 嵌入式數據庫。 Serverless NoSQL 文檔存儲類似于 MongoDB 的簡單 API100% C# 代碼,支持 .NET 3.5 / .NET 4.0 / NETStandard 1.3 / NETStandard 2.0,單 DLL (小于 300 kb)支持線程和進程安全支持文檔/操作級別的 ACID支持寫失敗后的數…

Google 發布最新開放大語言模型 Gemma 2,現已登陸 Hugging Face Hub

Google 發布了最新的開放大語言模型 Gemma 2,我們非常高興與 Google 合作,確保其在 Hugging Face 生態系統中的最佳集成。你可以在 Hub 上找到 4 個開源模型 (2 個基礎模型和 2 個微調模型) 。發布的功能和集成包括: Hub 上的模型https://hf.…

Java家教系統小程序APP公眾號h5源碼

讓學習更高效,更便捷 🌟 引言:家教新選擇,小程序來助力 在快節奏的現代生活中,家長們越來越注重孩子的教育問題。然而,如何為孩子找到一位合適的家教老師,成為了許多家長頭疼的問題。現在&…

交叉編譯中的 --build、 --host和 --target

在交叉編譯中比較常見的一些參數就是build、host和target了,正確的理解這三者的含義對于交叉編譯是非常重要的,下面就此進行解釋   --build=編譯該軟件所使用的平臺   --host=該軟件將運行在哪個平臺   --target=該軟件所處理的目標平臺 我們經常會看到如下代碼:   …

谷歌個人號,20人連續封測14天所需設備該怎么解決?

現在,在Google Play上架應用,對于大部分開發者來說,真的是不小的挑戰,因為目前谷歌上架政策越來越嚴格了。特別是從2023年11月13日起,新政策要求個人開發者賬號的應用必須經過20個獨立用戶連續14天的封閉測試&#xff…

【C語言】--分支和循環(1)

🍿個人主頁: 起名字真南 🧇個人專欄:【數據結構初階】 【C語言】 目錄 前言1 if 語句1.1 if1.2 else1.3 嵌套if1.4 懸空else 前言 C語言是結構化的程序設計語言,這里的結構指的是順序結構、選擇結構、循環結構。 我們可以用if、switch實現分支…

vue2實例實現一個初步的vuex

vue2實例實現一個初步的vuex 實現源碼:vue2-review 1.App.vue 2.store目錄下的index.js 3.效果 微信公眾號:刺頭拾年

MATLAB的.m文件與Python的.py文件:比較與互參

simulink MATLAB的.m文件與Python的.py文件:比較與互參相似之處**1. 基本結構****2. 執行邏輯****3. 可讀性和維護性** 差異性**1. 語法特性****2. 性能和應用****3. 開發環境** 互相學習的可能性結論 MATLAB的.m文件與Python的.py文件:比較與互參 在編…

擴展閱讀:什么是中斷

如果用一句話概括操作系統的原理,那就是:整個操作系統就是一個中斷驅動的死循環,用最簡單的代碼解釋如下: while(true){doNothing(); } 其他所有事情都是由操作系統提前注冊的中斷機制和其對應的中斷處理函數完成的。我們點擊一下鼠標,敲擊一下鍵盤,執行一個程序,…

重生之我要學后端100--計算機網絡部分概念(持續更新)

TCP/IP、DNS、負載均衡器等等 前言一、TCP/IP(傳輸控制協議/互聯網協議)二、DNS(域名系統)三、負載均衡器其他網絡概念 前言 了解網絡基礎知識對于后端開發者至關重要,因為這些知識有助于理解應用程序是如何在更廣闊的…

中英雙語介紹美國的州:麻省,馬塞諸塞州(Massachusetts)

中文版 馬薩諸塞州(Massachusetts)位于美國東北部的新英格蘭地區,是美國歷史最悠久、文化最豐富的州之一。以下是對馬薩諸塞州各方面的詳細介紹: 人口 截至2020年,美國人口普查數據顯示,馬薩諸塞州的人口…

C++ 之運算符

作用:用于執行代碼的運算 主要的運算符類型: 運算符類型作用算術運算符用于處理四則運算賦值運算符用于將表達式的值賦給變量比較運算符用于表達式的比較,并返回一個真值或假植邏輯運算符用于根據表達式的值返回真值或假植 1 算術運算符 …

Spring MVC中的DispatcherServlet、HandlerMapping和ViewResolver的作用

在Spring MVC框架中,DispatcherServlet、HandlerMapping和ViewResolver是核心組件,它們各自承擔著不同的角色和任務: 1.DispatcherServlet:它是Spring MVC生命周期中的前端控制器,負責接收HTTP請求并將它們分發給相應的…

5.x86游戲實戰-CE定位基地址

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 上一個內容:4.x86游戲實戰-人物狀態標志位 上一個內容通過CE未知的初始值、未變動的數值、…

機器學習SVR 隨機森林 RBF神經網絡做回歸預測的MATLAB代碼

SVR 參考這篇文章 Libsvm使用筆記【matlab】 close all; clc clear %% 下載數據 load(p_train.mat); load(p_test.mat); load(t_train.mat); load(t_test.mat); %% 數據歸一化 %輸入樣本歸一化 [pn_train,ps1] mapminmax(p_train); pn_train pn_train; pn_test mapminma…

設置用戶訪問hdfs

如果hadoop沒有啟Kerberos或者從Kerberos獲取的用戶為null,那么獲取HADOOP_USER_NAME環境變量,并將它的值作為Hadoop執行用戶。如果我們沒有設置HADOOP_USER_NAME環境變量,那么程序將調用whoami來獲取當前用戶,并用groups來獲取用…

JVM相關總結

JVM的些許問題 1.JVM內存區域劃分 2.JVM類加載過程 3.JVM的垃圾回收機制 1.JVM的內存區域劃分 一個運行起來的Java進程就是一個JVM虛擬機,需要從操作系統申請一大片內存,就會把內存劃分成幾個區域,每個區域都有不同的作用 常見的面試題 2.JVM類加載過程 熟練背誦 ! ! !…

printf內幕----編程內幕(1)

曾幾何時,您有沒有在夜深人靜的時候想過一個問題,printf內部究竟做了什么?為何可以輸出到屏幕上顯示出來? 先看看這段熟悉的代碼: // // Created by xi.chen on 2017/9/2. // Copyright © 2017 All rights rese…

WordPress中文網址導航欄主題風格模版HaoWa

模板介紹 WordPress響應式網站中文網址導航欄主題風格模版HaoWa1.3.1源碼 HaoWA主題風格除行為主體導航欄目錄外,對主題風格需要的小控制模塊都開展了敞開式的HTML在線編輯器方式的作用配備,另外預埋出默認設置的編碼構造,便捷大伙兒在目前…

入門JavaWeb之 JDBC 連接數據庫

JDBC:Java Database Connectivity,Java 數據庫連接 需要 jar 包支持: java.sql javax.sql mysql-connector-java(連接驅動,必須導入) 在 MySQL 先建個 jdbc 數據庫后 USE jdbc; 執行后再 CREATE TABLE…