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

MySQL 內(nèi)置函數(shù)指南之日期、字符串、數(shù)學(xué)函數(shù)實(shí)戰(zhàn)

 更新時(shí)間:2026年03月26日 11:56:37   作者:草莓熊Lotso  
本文基于實(shí)戰(zhàn)場(chǎng)景,全面拆解 MySQL 常用內(nèi)置函數(shù),涵蓋日期、字符串、數(shù)學(xué)、其他工具類函數(shù),附帶詳細(xì)案例和避坑要點(diǎn),感興趣的朋友跟隨小編一起看看吧

前言:

在 MySQL 開發(fā)中,內(nèi)置函數(shù)是提升 SQL 效率和靈活性的核心工具。無論是日期計(jì)算、字符串處理,還是數(shù)學(xué)運(yùn)算、數(shù)據(jù)加密,合理使用內(nèi)置函數(shù)能大幅簡(jiǎn)化代碼,避免重復(fù)邏輯。本文基于實(shí)戰(zhàn)場(chǎng)景,全面拆解 MySQL 常用內(nèi)置函數(shù),涵蓋日期、字符串、數(shù)學(xué)、其他工具類函數(shù),附帶詳細(xì)案例和避坑要點(diǎn)。

一. 日期函數(shù):處理時(shí)間相關(guān)需求

日期函數(shù)是業(yè)務(wù)開發(fā)中最常用的函數(shù)類別,用于獲取當(dāng)前時(shí)間、日期加減、時(shí)間差計(jì)算等場(chǎng)景,解決時(shí)間相關(guān)的數(shù)據(jù)處理問題。

1.1 核心日期函數(shù)表

函數(shù)描述
current_date()獲取當(dāng)前日期(格式:yyyy-mm-dd)
current_time()獲取當(dāng)前時(shí)間(格式:hh:mm:ss)
current_timestamp()獲取當(dāng)前時(shí)間戳(格式:yyyy-mm-dd hh:mm:ss)
now()等同于 current_timestamp(),獲取當(dāng)前日期時(shí)間
date(datetime)提取日期時(shí)間中的日期部分
date_add(date, interval 數(shù)值 單位)日期/時(shí)間加法(單位:year/day/hour/minute/second)
date_sub(date, interval 數(shù)值 單位)日期/時(shí)間減法(單位同上)
datediff(date1, date2)計(jì)算 date1 - date2 的天數(shù)差(僅日期部分)

1.2 實(shí)戰(zhàn)案例

1.2.1 基礎(chǔ)時(shí)間獲取

-- 獲取當(dāng)前日期
select current_date(); -- 結(jié)果:2026-03-10
-- 獲取當(dāng)前時(shí)間
select current_time(); -- 結(jié)果:12:34:50
-- 獲取當(dāng)前時(shí)間戳
select current_timestamp(); -- 結(jié)果:2026-03-10 12:34:50
select now(); -- 結(jié)果同上,更常用

1.2.2 日期加減運(yùn)算

-- 日期加10天
select date_add('2026-03-10', interval 10 day); -- 結(jié)果:2026-03-20
-- 日期減2年
select date_sub('2026-03-10', interval 2 year); -- 結(jié)果:2024-03-10
-- 時(shí)間加30分鐘
select date_add('2026-03-10 14:30:00', interval 30 minute); -- 結(jié)果:2024-05-20 15:00:00
-- 時(shí)間減1小時(shí)
select date_sub('2026-03-10 14:30:00', interval 1 hour); -- 結(jié)果:2024-05-20 13:30:00

1.2.3 日期差計(jì)算與時(shí)間提取

-- 計(jì)算兩個(gè)日期的天數(shù)差(date1 - date2)
select datediff('2024-05-20', '2024-01-01'); -- 結(jié)果:140
-- 提取datetime中的日期部分
create table msg (
  id int primary key auto_increment,
  content varchar(30) not null,
  sendtime datetime
);
insert into msg(content, sendtime) values 
('hello mysql', now()),
('hello function', now());
-- 僅顯示發(fā)布日期,隱藏時(shí)間
select content, date(sendtime) as send_date from msg;
  • 請(qǐng)查詢?cè)?分鐘內(nèi)發(fā)布的帖子
select * from msg where date_add(sendtime, interval 2 minute) > now();

1.2.4 業(yè)務(wù)場(chǎng)景:查詢近期數(shù)據(jù)

-- 查詢2分鐘內(nèi)發(fā)布的留言
select * from msg where date_add(sendtime, interval 2 minute) > now();
-- 查詢3天內(nèi)的生日記錄
create table user_birthday (
  id int primary key auto_increment,
  name varchar(20) not null,
  birthday date
);
insert into user_birthday(name, birthday) values 
('張三', '2000-05-18'),
('李四', '2000-06-01'),
('王五', '2000-05-22');
-- 計(jì)算當(dāng)前日期與生日的差值,篩選3天內(nèi)的記錄
select * from user_birthday 
where datediff(birthday, current_date()) between 0 and 3;

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

字符串函數(shù)用于字符串的拼接、截取、替換、大小寫轉(zhuǎn)換等操作,解決文本格式處理、內(nèi)容提取等需求。

2.1 核心字符串函數(shù)表

以下是您提供的字符串函數(shù)表格:

函數(shù)名稱描述
charset(str)返回字符串的字符集(如 utf8、gbk)
concat(str1, str2, ...)拼接多個(gè)字符串
instr(str, substr)返回 substr 在 str 中首次出現(xiàn)的位置(無則返回 0)
ucase(str) / upper(str)字符串轉(zhuǎn)大寫
lcase(str) / lower(str)字符串轉(zhuǎn)小寫
left(str, length)從 str 左側(cè)截取 length 個(gè)字符
length(str)返回字符串長(zhǎng)度(以字節(jié)為單位,受字符集影響)
replace(str, search_str, replace_str)用 replace_str 替換 str 中的 search_str
substring(str, pos [, length])從 str 的 pos 位置(1 開始)截取 length 個(gè)字符(length 可選,默認(rèn)到末尾)
ltrim(str) / rtrim(str) / trim(str)去除字符串左側(cè) / 右側(cè) / 兩側(cè)的空格
strcmp(str1, str2)逐字符比較 str1 和 str2(相等返回 0,str1 大返回 1,否則返回 -1)

2.2 實(shí)戰(zhàn)案例

2.2.1 字符串拼接與格式處理

-- 拼接字符串(業(yè)務(wù)場(chǎng)景:格式化顯示成績(jī))
create table exam_result (
  name varchar(20) not null,
  chinese float,
  math float,
  english float
);
insert into exam_result values 
('張三', 85, 92, 78),
('李四', 90, 88, 95);
-- 格式:“XXX的語(yǔ)文XXX分,數(shù)學(xué)XXX分,英語(yǔ)XXX分”
select concat(name, '的語(yǔ)文', chinese, '分,數(shù)學(xué)', math, '分,英語(yǔ)', english, '分') as 成績(jī)?cè)斍?
from exam_result;

2.2.2 字符串截取與替換

-- 截取exam_result表中ename字段的第二個(gè)到第三個(gè)字符 
select ename, substring(ename, 2, 2) from exam_result;
-- 替換字符串(將ename列中有'S'的替換為'上海')
select ename, replace(ename, 's', '上海') from exam_result;
-- 左側(cè)截?。ㄈ∏?個(gè)字符)
select left('hello world', 3); -- 結(jié)果:hel

2.2.3 大小寫轉(zhuǎn)換與空格處理

-- 轉(zhuǎn)大寫/小寫
select ucase('mysql'), lower('MYSQL'); -- 結(jié)果:MYSQL、mysql
-- 去除空格
select trim('  mysql  '); -- 結(jié)果:mysql(去除兩側(cè)空格)
select ltrim('  mysql  '); -- 結(jié)果:mysql  (僅去除左側(cè)空格)

2.2.4 字符串長(zhǎng)度與位置查詢

-- 計(jì)算字符串長(zhǎng)度(utf8編碼下,中文占3字節(jié))
select length('mysql'), length('MySQL函數(shù)'); -- 結(jié)果:5、11(5+3*2=11)
-- 查詢子串位置(逗號(hào)在字符串中出現(xiàn)的位置)
select instr('10,A,B', ','); -- 結(jié)果:3(第一個(gè)逗號(hào)的位置)
-- 業(yè)務(wù)場(chǎng)景:統(tǒng)計(jì)逗號(hào)出現(xiàn)次數(shù)(OJ真題)
select (length('10,A,B') - length(replace('10,A,B', ',', ''))) as cnt; -- 結(jié)果:2

2.2.5 首字母小寫格式化

-- 員工姓名首字母小寫,其余不變(如SMITH→sMITH)
create table emp (ename varchar(20));
insert into emp values ('SMITH'), ('SCOTT'), ('WARD');
select concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) as format_name 
from emp;

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

數(shù)學(xué)函數(shù)用于數(shù)值的運(yùn)算、進(jìn)制轉(zhuǎn)換、取整、隨機(jī)數(shù)生成等,解決數(shù)值處理相關(guān)需求。

3.1 核心數(shù)學(xué)函數(shù)表

函數(shù)描述
abs(number)絕對(duì)值
bin(decimal)十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制
hex(decimal)十進(jìn)制數(shù)轉(zhuǎn)十六進(jìn)制
conv(number, from_base, to_base)進(jìn)制轉(zhuǎn)換(如二進(jìn)制轉(zhuǎn)十進(jìn)制)
ceiling(number)向上取整(大于等于該數(shù)的最小整數(shù))
floor(number)向下取整(小于等于該數(shù)的最大整數(shù))
format(number, decimals)格式化數(shù)值,保留 decimals 位小數(shù)(四舍五入)
rand()生成隨機(jī)浮點(diǎn)數(shù)(范圍:[0.0, 1.0))
mod(number, denominator)取模(求余數(shù),等同于 number % denominator)

3.2 實(shí)戰(zhàn)案例

-- 絕對(duì)值
select abs(-100.5), abs(200); -- 結(jié)果:100.5、200
-- 取整操作
select ceiling(23.1), ceiling(23.9); -- 結(jié)果:24、24(向上取整)
select floor(23.1), floor(23.9); -- 結(jié)果:23、23(向下取整)
-- 數(shù)值格式化(保留2位小數(shù))
select format(123.456, 2), format(78.9, 2); -- 結(jié)果:123.46、78.90
-- 進(jìn)制轉(zhuǎn)換
select bin(10), hex(10); -- 結(jié)果:1010(二進(jìn)制)、A(十六進(jìn)制)
select conv('1010', 2, 10); -- 結(jié)果:10(二進(jìn)制轉(zhuǎn)十進(jìn)制)
-- 隨機(jī)數(shù)生成(生成1-100的隨機(jī)整數(shù))
select rand(), floor(rand() * 100) + 1;
-- 取模運(yùn)算(求余數(shù))
select mod(10, 3), 10 % 3; -- 結(jié)果:1、1

四. 其他常用函數(shù):工具類功能

這類函數(shù)涵蓋用戶查詢、數(shù)據(jù)庫(kù)查詢、數(shù)據(jù)加密、空值處理等實(shí)用功能,是開發(fā)中的 “小幫手”。

4.1 核心工具函數(shù)表

函數(shù)描述
user()查詢當(dāng)前登錄 MySQL 的用戶(格式:用戶名@主機(jī))
database()查詢當(dāng)前正在使用的數(shù)據(jù)庫(kù)
md5(str)對(duì)字符串進(jìn)行 MD5 加密(返回 32 位字符串)
password(str)MySQL 用戶密碼加密(僅用于用戶認(rèn)證,不推薦業(yè)務(wù)加密)
ifnull(val1, val2)空值處理:val1 為 null 則返回 val2,否則返回 val1

4.2 實(shí)戰(zhàn)案例

-- 查詢當(dāng)前用戶和數(shù)據(jù)庫(kù)
select user(); -- 結(jié)果:root@localhost
select database(); -- 結(jié)果:當(dāng)前使用的數(shù)據(jù)庫(kù)名(如test)
-- 數(shù)據(jù)加密(業(yè)務(wù)場(chǎng)景:密碼存儲(chǔ))
select md5('admin'); -- 結(jié)果:21232f297a57a5a743894a0e4a801fc3(MD5加密)
select password('root'); -- 結(jié)果:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B(MySQL密碼加密)
-- 空值處理(避免null影響運(yùn)算)
create table user_info (
  id int primary key auto_increment,
  name varchar(20) not null,
  age int
);
insert into user_info(name, age) values 
('張三', 20),
('李四', null),
('王五', 25);
-- 年齡為null時(shí)顯示0
select name, ifnull(age, 0) as format_age from user_info;

五. 函數(shù)使用避坑指南和總結(jié)

  • 期函數(shù)的單位大小寫不敏感:interval 10 dayinterval 10 DAY效果一致,但推薦小寫;
  • length 函數(shù)按字節(jié)計(jì)算長(zhǎng)度:utf8 編碼下中文占 3 字節(jié),gbk 編碼下占 2 字節(jié),需注意字符集影響
  • substring 函數(shù)的位置從 1 開始:不同于編程語(yǔ)言的 0 起始索引,如substring('mysql', 1, 3)返回mys;
  • rand () 函數(shù)每次調(diào)用生成新值:如需固定隨機(jī)數(shù),可結(jié)合種子(如rand(10)),但種子固定后隨機(jī)序列固定;
  • ifnull 僅處理 null 值:空字符串('')、0 等非 null 值不會(huì)觸發(fā)替換,如需處理空字符串可結(jié)合case when;
  • md5 加密不可逆:僅用于密碼存儲(chǔ)等場(chǎng)景,不可用于需要解密的數(shù)據(jù)。

總結(jié):MySQL 內(nèi)置函數(shù)覆蓋了日期、字符串、數(shù)學(xué)、工具類等核心場(chǎng)景,合理使用能大幅提升 SQL 開發(fā)效率。核心要點(diǎn)總結(jié):

  • 日期函數(shù)解決時(shí)間獲取、加減、差值計(jì)算,是業(yè)務(wù)系統(tǒng)的核心工具;
  • 字符串函數(shù)處理文本格式、拼接、截取,滿足數(shù)據(jù)展示和清洗需求;
  • 數(shù)學(xué)函數(shù)用于數(shù)值運(yùn)算和格式化,適用于統(tǒng)計(jì)、隨機(jī)數(shù)生成等場(chǎng)景;
  • 工具類函數(shù)提供加密、空值處理等實(shí)用功能,簡(jiǎn)化開發(fā)流程。

到此這篇關(guān)于MySQL 內(nèi)置函數(shù)指南之日期、字符串、數(shù)學(xué)函數(shù)實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)mysql內(nèi)置函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水)

    SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水)

    這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • mysql的樂觀鎖和冪等性問題以及解決方案

    mysql的樂觀鎖和冪等性問題以及解決方案

    這篇文章主要介紹了mysql的樂觀鎖和冪等性問題以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • mysql間隙鎖加鎖11個(gè)規(guī)則(案例分析)

    mysql間隙鎖加鎖11個(gè)規(guī)則(案例分析)

    這篇文章主要介紹了mysql間隙鎖加鎖11個(gè)規(guī)則?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MySQL存儲(chǔ)引擎InnoDB的配置與使用的講解

    MySQL存儲(chǔ)引擎InnoDB的配置與使用的講解

    今天小編就為大家分享一篇關(guān)于MySQL存儲(chǔ)引擎InnoDB的配置與使用的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL中的復(fù)合查詢使用解讀

    MySQL中的復(fù)合查詢使用解讀

    本文詳細(xì)介紹了MySQL復(fù)合查詢的核心玩法,包括單表查詢、多表聯(lián)查、子查詢和合并查詢,通過實(shí)際的員工管理系統(tǒng)數(shù)據(jù),展示了如何使用各種查詢語(yǔ)句來滿足復(fù)雜的業(yè)務(wù)需求
    2025-12-12
  • MySQL 用戶管理和數(shù)據(jù)庫(kù)權(quán)限問題

    MySQL 用戶管理和數(shù)據(jù)庫(kù)權(quán)限問題

    MySQL作為世界上最流行的開源關(guān)系型數(shù)據(jù)庫(kù),在實(shí)際生產(chǎn)環(huán)境中,合理的用戶管理和權(quán)限控制是確保數(shù)據(jù)安全的重要基石,本文將從零開始,手把手教你掌握MySQL的用戶管理和權(quán)限控制,感興趣的朋友一起看看吧
    2025-06-06
  • window環(huán)境下使用VScode連接虛擬機(jī)MySQL方法

    window環(huán)境下使用VScode連接虛擬機(jī)MySQL方法

    這篇文章主要介紹了window環(huán)境下使用VScode連接虛擬機(jī)MySQL方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySql查詢中按多個(gè)字段排序的方法

    MySql查詢中按多個(gè)字段排序的方法

    在SQL查詢中,經(jīng)常需要按多個(gè)字段對(duì)結(jié)果進(jìn)行排序,本文主要介紹了MySql查詢中按多個(gè)字段排序的方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的實(shí)戰(zhàn)步驟

    MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的實(shí)戰(zhàn)步驟

    在Mysql中使用外鍵,可以有效地將多個(gè)表格的數(shù)據(jù)"聯(lián)動(dòng)"起來,打破獨(dú)立狀態(tài),互相影響,下面這篇文章主要給大家介紹了關(guān)于MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • PHP版Mysql爆破小腳本

    PHP版Mysql爆破小腳本

    本文給大家分享的是使用php實(shí)現(xiàn)暴力破解mysql的小腳本代碼,非常的好用,有需要的小伙伴可以參考下
    2016-10-10

最新評(píng)論

新巴尔虎右旗| 佳木斯市| 拜城县| 青州市| 天祝| 江西省| 萨嘎县| 亳州市| 隆回县| 高要市| 新绛县| 台北县| 万宁市| 望城县| 昭苏县| 田林县| 民和| 石首市| 德保县| 彭州市| 临清市| 泽州县| 洪洞县| 长阳| 那坡县| 仙游县| 延边| 镇江市| 赤水市| 庄浪县| 黄梅县| 溆浦县| 同江市| 芜湖市| 达尔| 田林县| 鹤山市| 海伦市| 玛多县| 确山县| 格尔木市|