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

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

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

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

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

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

1. 獲取當(dāng)前時(shí)間信息

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

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

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

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

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

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

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

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

在指定日期上增加或減少時(shí)間,支持天、分鐘、秒等單位,靈活應(yīng)對(duì) “有效期計(jì)算”“超時(shí)判斷” 等場(chǎng)景。

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

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

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

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

3. 計(jì)算日期差:datediff()

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

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

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

需求:從msg留言表中,找出 “發(fā)布時(shí)間 + 2 分鐘” 仍在當(dāng)前時(shí)間之前的記錄(即 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為當(dāng)前時(shí)間
insert into msg (content, sendtime) values 
  ('MySQL函數(shù)真好用', now()),
  ('今天學(xué)到新技巧了', now()),
  ('這是1小時(shí)前的舊留言', date_sub(now(), interval 1 hour));

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

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

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

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

1. 查看字符集:charset()

確認(rèn)字符串或字段的字符集,避免因編碼不一致導(dǎo)致亂碼。

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

2. 拼接字符串:concat()

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

-- 拼接固定文本和數(shù)字
select concat('Hello', 'MySQL', 2024);
-- 結(jié)果:HelloMySQL2024
-- 實(shí)戰(zhàn)場(chǎng)景:格式化顯示學(xué)生成績(jī)(exam_result表含name、chinese、math字段)
select concat(name, '的語(yǔ)文是', chinese, '分,數(shù)學(xué)是', math, '分') as 成績(jī)?cè)斍?
from exam_result;
-- 結(jié)果:唐三藏的語(yǔ)文是134分,數(shù)學(xué)是98分

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

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

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

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

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

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

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

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

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

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

  • left(主串, 長(zhǎng)度):從左側(cè)截取指定長(zhǎng)度的字符
  • right(主串, 長(zhǎng)度):從右側(cè)截取指定長(zhǎng)度的字符
  • substring(主串, 起始下標(biāo), 長(zhǎng)度):從指定下標(biāo)開(kāi)始,截取指定長(zhǎng)度(下標(biāo)從 1 開(kāi)始)
-- 左側(cè)截取3個(gè)字符
select left('MySQL函數(shù)', 3);
-- 結(jié)果:MyS
-- 右側(cè)截取2個(gè)字符
select right('MySQL函數(shù)', 2);
-- 結(jié)果:函數(shù)
-- 從第4個(gè)字符開(kāi)始,截取3個(gè)字符
select substring('MySQL函數(shù)指南', 4, 3);
-- 結(jié)果:QL函

7. 替換字符:replace()

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

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

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

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

三、數(shù)學(xué)函數(shù):處理數(shù)值計(jì)算

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

1. 絕對(duì)值:abs()

返回?cái)?shù)值的絕對(duì)值,常用于計(jì)算差值(如距離、誤差)。

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

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

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

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

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

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

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

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

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

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

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

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

返回當(dāng)前登錄 MySQL 的用戶名及主機(jī),用于權(quán)限排查。

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

2. 密碼加密:md5()

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

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

創(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)存儲(chǔ)
);

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

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

驗(yàn)證密碼(查詢時(shí)需對(duì)輸入的密碼也進(jìn)行 MD5 加密):

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

3. 空值處理:ifnull()

如果第一個(gè)值為null,則返回第二個(gè)值;否則返回第一個(gè)值,常用于避免null導(dǎo)致的計(jì)算錯(cuò)誤。

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

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

相關(guān)文章

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

    SQL大表關(guān)聯(lián)優(yōu)化全攻略及常見(jiàn)問(wèn)題

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

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

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

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

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

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

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

    mysql刪除字段的基本語(yǔ)法和示例

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

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

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

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

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

    簡(jiǎn)單聊一聊SQL中的union和union?all

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

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

    這類文章記錄我看MySQL5.6從零開(kāi)始學(xué)》這本書(shū)的過(guò)程,將自己覺(jué)得重要的東西記錄一下,并有可能幫助到你們,在寫(xiě)的博文前幾篇度會(huì)非?;A(chǔ),只要?jiǎng)邮智茫覍?xiě)的例子全部實(shí)現(xiàn)一遍,基本上就搞定了,前期很難理解的東西基本沒(méi)有
    2018-07-07
  • MySQL高效導(dǎo)入多個(gè).sql文件方法詳解

    MySQL高效導(dǎo)入多個(gè).sql文件方法詳解

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

最新評(píng)論

诸城市| 香河县| 永平县| 奎屯市| 长宁区| 额敏县| 邹平县| 吴旗县| 镇沅| 乌审旗| 鄂托克前旗| 新竹县| 澳门| 临夏县| 晋江市| 宣武区| 台北市| 遵义县| 合山市| 独山县| 竹溪县| 织金县| 内乡县| 巩义市| 蕲春县| 台山市| 洛南县| 潞西市| 台南市| 砚山县| 上林县| 库尔勒市| 连山| 岚皋县| 五华县| 壶关县| 图木舒克市| 图们市| 全椒县| 西乌| 红安县|