最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 常用函數(shù)實操攻略之從基礎到實戰(zhàn)案例

 更新時間:2025年10月20日 15:34:03   作者:藤椒味的火腿腸真不錯  
MySQL操作中,函數(shù)是提升數(shù)據(jù)處理效率的核心工具,無論是日期計算、字符串拼接,還是數(shù)據(jù)加密,掌握常用函數(shù)能讓復雜需求變得簡單,本文從實際出發(fā),梳理日期、字符串、數(shù)學及高頻函數(shù)的用法,每個函數(shù)都附帶可直接運行的代碼案例,幫你快速上手,感興趣的朋友跟隨小編一起看看吧

在 MySQL 數(shù)據(jù)庫操作中,函數(shù)是提升數(shù)據(jù)處理效率的核心工具。無論是日期計算、字符串拼接,還是數(shù)據(jù)加密,掌握常用函數(shù)能讓復雜需求變得簡單。本文將從實際場景出發(fā),梳理日期、字符串、數(shù)學及其他高頻函數(shù)的用法,每個函數(shù)都附帶可直接運行的代碼案例,幫你快速上手。

一、日期函數(shù):處理時間維度數(shù)據(jù)

日期函數(shù)是業(yè)務開發(fā)中的 “高頻工具”,比如統(tǒng)計近 7 天訂單、篩選 2 分鐘內(nèi)的新留言等場景都離不開它。以下是最常用的 6 類日期函數(shù)及實操案例。

1. 獲取當前時間信息

無需手動輸入時間,用函數(shù)直接獲取系統(tǒng)當前時間,避免人工錄入誤差。

獲取年月日current_date(),返回格式YYYY-MM-DD

select current_date();
-- 結果:2024-10-01

獲取時分秒current_time(),返回格式HH:MM:SS

select current_time();
-- 結果:14:25:30

獲取完整時間current_timestamp() 或 now(),兩者功能一致,返回YYYY-MM-DD HH:MM:SS

select now();
-- 結果:2024-10-01 14:26:15

2. 日期 / 時間增減:date_add()與date_sub()

在指定日期上增加或減少時間,支持天、分鐘、秒等單位,靈活應對 “有效期計算”“超時判斷” 等場景。

加時間date_add(原始日期, interval 數(shù)值 單位)

-- 給2024-10-01加5天
select date_add('2024-10-01', interval 5 day);
-- 結果:2024-10-06
-- 給2024-10-01 12:00:00加30分鐘
select date_add('2024-10-01 12:00:00', interval 30 minute);
-- 結果:2024-10-01 12:30:00

減時間date_sub(原始日期, interval 數(shù)值 單位)

-- 給2024-10-01減7天
select date_sub('2024-10-01', interval 7 day);
-- 結果:2024-09-24

3. 計算日期差:datediff()

統(tǒng)計兩個日期之間的天數(shù)差,結果為 “前日期 - 后日期”,正數(shù)表示前者晚,負數(shù)表示前者早。

-- 計算2024-10-01與2024-09-20的天數(shù)差
select datediff('2024-10-01', '2024-09-20');
-- 結果:11(10月1日比9月20日晚11天)
select datediff('2024-09-20', '2024-10-01');
-- 結果:-11(9月20日比10月1日早11天)

4. 實戰(zhàn)案例:篩選 2 分鐘內(nèi)的新留言

需求:從msg留言表中,找出 “發(fā)布時間 + 2 分鐘” 仍在當前時間之前的記錄(即 2 分鐘內(nèi)發(fā)布的留言)。

先創(chuàng)建msg表并插入數(shù)據(jù):

create table msg(
  id int primary key auto_increment,
  content varchar(30) not null,
  sendtime datetime
);
-- 插入3條留言,sendtime為當前時間
insert into msg (content, sendtime) values 
  ('MySQL函數(shù)真好用', now()),
  ('今天學到新技巧了', now()),
  ('這是1小時前的舊留言', date_sub(now(), interval 1 hour));

篩選 2 分鐘內(nèi)的留言:

select * from msg 
where date_add(sendtime, interval 2 minute) > now();
-- 結果:只顯示前2條剛插入的新留言,舊留言被過濾

二、字符串函數(shù):處理文本類數(shù)據(jù)

字符串函數(shù)常用于數(shù)據(jù)格式化(如 “XXX 的語文成績是 XXX 分”)、內(nèi)容匹配、空格清理等場景,以下是開發(fā)中最常用的 8 類函數(shù)。

1. 查看字符集:charset()

確認字符串或字段的字符集,避免因編碼不一致導致亂碼。

-- 查看字符串的字符集
select charset('MySQL學習');
-- 結果:utf8
-- 查看表中字段的字符集(以student表的name字段為例)
select charset(name) from student;
-- 結果:所有行均返回utf8

2. 拼接字符串:concat()

將多個字符串 / 字段拼接成一個,支持文本與數(shù)字混合拼接。

-- 拼接固定文本和數(shù)字
select concat('Hello', 'MySQL', 2024);
-- 結果:HelloMySQL2024
-- 實戰(zhàn)場景:格式化顯示學生成績(exam_result表含name、chinese、math字段)
select concat(name, '的語文是', chinese, '分,數(shù)學是', math, '分') as 成績詳情
from exam_result;
-- 結果:唐三藏的語文是134分,數(shù)學是98分

3. 計算字節(jié)數(shù):length()

統(tǒng)計字符串占用的字節(jié)數(shù),注意:UTF8 編碼下,1 個中文占 3 字節(jié),1 個英文 / 數(shù)字占 1 字節(jié)。

-- 計算中文+英文的字節(jié)數(shù)
select length('MySQL學習');
-- 結果:9(MySQL是5個字母,占5字節(jié);“學習”是2個中文,占6字節(jié),合計5+6=11?此處修正:MySQL是5字符,占5字節(jié),“學習”2字符占6字節(jié),總計11,此前示例有誤,以實際計算為準)
-- 查看學生姓名的字節(jié)數(shù)(student表)
select name, length(name) as 姓名字節(jié)數(shù) from student;
-- 結果:張三 → 6字節(jié)(2個中文×3)

4. 查找子串位置:instr()

判斷子串是否在主串中,返回子串的起始下標(從 1 開始),若不存在則返回 0。

-- 查找“函數(shù)”在主串中的位置
select instr('MySQL常用函數(shù)指南', '函數(shù)');
-- 結果:6(“函數(shù)”從第6個字符開始)
-- 查找不存在的子串
select instr('MySQL常用函數(shù)指南', 'SQL Server');
-- 結果:0

5. 大小寫轉(zhuǎn)換:ucase()與lcase()

將字符串統(tǒng)一轉(zhuǎn)為大寫或小寫,常用于不區(qū)分大小寫的查詢場景。

-- 轉(zhuǎn)為大寫
select ucase('mysql');
-- 結果:MYSQL
-- 轉(zhuǎn)為小寫
select lcase('MYSQL FUNCTION');
-- 結果:mysql function

6. 截取字符串:left()、right()、substring()

  • left(主串, 長度):從左側截取指定長度的字符
  • right(主串, 長度):從右側截取指定長度的字符
  • substring(主串, 起始下標, 長度):從指定下標開始,截取指定長度(下標從 1 開始)
-- 左側截取3個字符
select left('MySQL函數(shù)', 3);
-- 結果:MyS
-- 右側截取2個字符
select right('MySQL函數(shù)', 2);
-- 結果:函數(shù)
-- 從第4個字符開始,截取3個字符
select substring('MySQL函數(shù)指南', 4, 3);
-- 結果:QL函

7. 替換字符:replace()

將主串中的指定子串替換為新字符,常用于敏感詞過濾、內(nèi)容修正。

-- 將“MySQL”替換為“數(shù)據(jù)庫”
select replace('學習MySQL很重要', 'MySQL', '數(shù)據(jù)庫');
-- 結果:學習數(shù)據(jù)庫很重要
-- 實戰(zhàn)場景:將emp表ename字段中的“S”替換為“上?!?
select replace(ename, 'S', '上海') as 替換后姓名 from emp;
-- 結果:SMITH → 上海MITH

8. 清理空格:ltrim()、rtrim()、trim()

  • ltrim(字符串):清除左側空格
  • rtrim(字符串):清除右側空格
  • trim(字符串):清除兩側空格
-- 清除左側空格
select ltrim('   左側有空格  ') as 結果;
-- 結果:左側有空格  
-- 清除兩側空格
select trim('   兩側有空格  ') as 結果;
-- 結果:兩側有空格

三、數(shù)學函數(shù):處理數(shù)值計算

數(shù)學函數(shù)主要用于數(shù)值的計算與格式化,如絕對值、取整、隨機數(shù)生成等,以下是 4 類常用函數(shù)。

1. 絕對值:abs()

返回數(shù)值的絕對值,常用于計算差值(如距離、誤差)。

select abs(-100); -- 結果:100
select abs(25.5); -- 結果:25.5

2. 取整:ceiling()與floor()

  • ceiling(數(shù)值):向上取整(無論小數(shù)部分是多少,都進 1)
  • floor(數(shù)值):向下取整(無論小數(shù)部分是多少,都舍掉)
-- 向上取整
select ceiling(3.1); -- 結果:4
select ceiling(-2.9); -- 結果:-2
-- 向下取整
select floor(3.9); -- 結果:3
select floor(-2.1); -- 結果:-3

3. 保留小數(shù):format()

按指定位數(shù)保留小數(shù),自動四舍五入,返回字符串格式(常用于金額、成績格式化)。

-- 保留2位小數(shù)
select format(123.456, 2); -- 結果:123.46(四舍五入)
select format(78.9, 2); -- 結果:78.90(補0)

4. 隨機數(shù):rand()

生成 0~1 之間的隨機小數(shù)(左閉右開),可通過乘法擴展到指定范圍。

-- 生成0~1的隨機數(shù)
select rand(); -- 結果:0.78956(每次運行結果不同)
-- 生成1~10的隨機整數(shù)(先×10,再保留0位小數(shù))
select format(rand()*10, 0) as 1到10的隨機數(shù);
-- 結果:5(每次運行結果不同)

四、其他高頻函數(shù):用戶、加密與空值處理

除了上述三類函數(shù),還有一些 “特殊功能” 函數(shù),在用戶管理、數(shù)據(jù)安全場景中非常實用。

1. 查看當前用戶:user()

返回當前登錄 MySQL 的用戶名及主機,用于權限排查。

select user();
-- 結果:root@localhost(root是用戶名,localhost是主機)

2. 密碼加密:md5()

對字符串進行 MD5 加密,生成 32 位的十六進制字符串,常用于密碼存儲(避免明文泄露)。

實戰(zhàn)場景:創(chuàng)建用戶表并加密存儲密碼

創(chuàng)建user_info表:

create table user_info(
  id int primary key auto_increment,
  username varchar(20) not null,
  password char(32) not null -- MD5加密后是32位,用char(32)存儲
);

插入加密后的密碼(原始密碼為 123456):

insert into user_info (username, password) 
values ('zhangsan', md5('123456'));

驗證密碼(查詢時需對輸入的密碼也進行 MD5 加密):

select id, username from user_info 
where password = md5('123456');
-- 結果:返回zhangsan的記錄(密碼匹配)

3. 空值處理:ifnull()

如果第一個值為null,則返回第二個值;否則返回第一個值,常用于避免null導致的計算錯誤。

-- 第一個值為null,返回第二個值
select ifnull(null, '空值時顯示這個'); -- 結果:空值時顯示這個
-- 第一個值不為null,返回第一個值
select ifnull(100, '空值時顯示這個'); -- 結果:100
-- 實戰(zhàn)場景:計算學生總分(若math字段為null,按0分計算)
select name, chinese + ifnull(math, 0) as 語文數(shù)學總分 
from exam_result;

到此這篇關于MySQL 常用函數(shù)實操攻略之從基礎到實戰(zhàn)案例的文章就介紹到這了,更多相關mysql常用函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SQL大表關聯(lián)優(yōu)化全攻略及常見問題

    SQL大表關聯(lián)優(yōu)化全攻略及常見問題

    在數(shù)據(jù)驅(qū)動的時代,SQL作為數(shù)據(jù)庫交互的核心語言,其重要性不言而喻,這篇文章主要介紹了SQL大表關聯(lián)優(yōu)化全攻略及常見問題的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • mysql 存在該記錄則更新,不存在則插入記錄的sql

    mysql 存在該記錄則更新,不存在則插入記錄的sql

    非常不錯的功能,主要用于更新特定的記錄,如果存在這條記錄則更新一下,如果不存在則插入記錄。應用于配置文件等。
    2010-04-04
  • MySQL內(nèi)存使用率高且不釋放問題排查與總結

    MySQL內(nèi)存使用率高且不釋放問題排查與總結

    這篇文章主要給大家介紹了MySQL內(nèi)存使用率高且不釋放問題排查與總結,文中通過代碼示例和圖文結合的方式給大家講解的非常詳細,對大家解決問題有一定的幫助,需要的朋友可以參考下
    2024-09-09
  • MySQL中隨機排序的幾種方法實現(xiàn)

    MySQL中隨機排序的幾種方法實現(xiàn)

    MySQL實現(xiàn)隨機排序有多種方法,包括使用RAND()、UUID()函數(shù),排序字段的哈希值以及自定義函數(shù),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • mysql刪除字段的基本語法和示例

    mysql刪除字段的基本語法和示例

    在MySQL中,使用ALTER?TABLE語句配合DROP?COLUMN子句可以刪除表中的某個字段,示例中,從employees表中刪除email字段,此操作會永久刪除該字段的數(shù)據(jù),因此需提前備份,需要的朋友可以參考下
    2024-09-09
  • 詳解數(shù)據(jù)庫多表連接查詢的實現(xiàn)方法

    詳解數(shù)據(jù)庫多表連接查詢的實現(xiàn)方法

    這篇文章主要介紹了詳解數(shù)據(jù)庫多表連接查詢的實現(xiàn)方法的相關資料,希望通過本文大家能夠掌握數(shù)據(jù)庫多表查詢的方法,需要的朋友可以參考下
    2017-09-09
  • linux系統(tǒng)ubuntu18.04安裝mysql 5.7

    linux系統(tǒng)ubuntu18.04安裝mysql 5.7

    這篇文章主要為大家詳細介紹了linux系統(tǒng)ubuntu18.04安裝mysql 5.7,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 簡單聊一聊SQL中的union和union?all

    簡單聊一聊SQL中的union和union?all

    在寫SQL的時候,偶爾會用到兩個表的數(shù)據(jù)結合在一起返回的,就需要用到UNION 和 UNION ALL,這篇文章主要給大家介紹了關于SQL中union和union?all的相關資料,需要的朋友可以參考下
    2023-02-02
  • MySQL入門(一) 數(shù)據(jù)表數(shù)據(jù)庫的基本操作

    MySQL入門(一) 數(shù)據(jù)表數(shù)據(jù)庫的基本操作

    這類文章記錄我看MySQL5.6從零開始學》這本書的過程,將自己覺得重要的東西記錄一下,并有可能幫助到你們,在寫的博文前幾篇度會非常基礎,只要動手敲,跟著我寫的例子全部實現(xiàn)一遍,基本上就搞定了,前期很難理解的東西基本沒有
    2018-07-07
  • MySQL高效導入多個.sql文件方法詳解

    MySQL高效導入多個.sql文件方法詳解

    MySQL有多種方法導入多個.sql文件,常用的有兩個命令:mysql和source,如何提高導入速度,在導入大的sql文件時,建議使用mysql命令
    2018-10-10

最新評論

启东市| 沽源县| 大庆市| 上高县| 太仓市| 达孜县| 博白县| 淮北市| 广汉市| 博湖县| 嘉鱼县| 鹤庆县| 朝阳区| 卢氏县| 黄平县| 泸定县| 无极县| 江油市| 屯门区| 井冈山市| 宝山区| 陆丰市| 芦山县| 合肥市| 无为县| 海晏县| 红桥区| 永吉县| 来凤县| 盐城市| 尼玛县| 武穴市| 门源| 陆河县| 辽阳市| 和林格尔县| 宜兴市| 长顺县| 乐都县| 黄石市| 固原市|