MySQL常用字符串函數(shù)示例和場(chǎng)景介紹
字符串是數(shù)據(jù)處理中最常見(jiàn)的數(shù)據(jù)類(lèi)型之一,從存儲(chǔ)用戶(hù)姓名、地址到處理文本內(nèi)容、日志信息,字符串?dāng)?shù)據(jù)貫穿于各種業(yè)務(wù)場(chǎng)景,MySQL提供了豐富的字符串函數(shù)幫助我們高效地對(duì)字符串進(jìn)行處理、轉(zhuǎn)換和分析。本文我將全面且深入地介紹MySQL常用的字符串函數(shù),并結(jié)合具體示例和場(chǎng)景,幫你熟練掌握這些實(shí)用工具。
一、字符串函數(shù)概述
1.1 字符串函數(shù)的作用
MySQL字符串函數(shù)能夠?qū)崿F(xiàn)對(duì)字符串的多種操作,包括但不限于:
- 字符串的拼接、截取、替換
- 大小寫(xiě)轉(zhuǎn)換、去空格
- 字符串查找、匹配與統(tǒng)計(jì)
- 字符串格式化與加密
這些函數(shù)極大地增強(qiáng)了SQL語(yǔ)句對(duì)字符串?dāng)?shù)據(jù)的處理能力,使開(kāi)發(fā)者可以在數(shù)據(jù)庫(kù)層面完成復(fù)雜的字符串操作,減少應(yīng)用層的處理壓力。
1.2 字符串函數(shù)分類(lèi)
根據(jù)功能特性,MySQL字符串函數(shù)可大致分為以下幾類(lèi):
- 字符串長(zhǎng)度與統(tǒng)計(jì)函數(shù)
- 字符串截取與提取函數(shù)
- 字符串連接與拆分函數(shù)
- 字符串查找與匹配函數(shù)
- 字符串轉(zhuǎn)換與格式化函數(shù)
- 字符串加密與解密函數(shù)
二、字符串長(zhǎng)度與統(tǒng)計(jì)函數(shù)
2.1 CHAR_LENGTH(str)
CHAR_LENGTH(str)函數(shù)用于返回字符串str的字符數(shù),一個(gè)漢字、字母、數(shù)字等都算作一個(gè)字符。
示例:查詢(xún)employees表中last_name字段的字符長(zhǎng)度
SELECT last_name, CHAR_LENGTH(last_name) AS length FROM employees;
2.2 LENGTH(str)
LENGTH(str)函數(shù)返回字符串str的字節(jié)長(zhǎng)度。在UTF8編碼下,一個(gè)英文字母占1個(gè)字節(jié),一個(gè)漢字占3個(gè)字節(jié)。
示例:查詢(xún)products表中product_name字段的字節(jié)長(zhǎng)度
SELECT product_name, LENGTH(product_name) AS byte_length FROM products;
2.3 OCTET_LENGTH(str)
OCTET_LENGTH(str)與LENGTH(str)功能相同,都是返回字符串的字節(jié)長(zhǎng)度。
SELECT OCTET_LENGTH('Hello, 世界') AS octet_length;
三、字符串截取與提取函數(shù)
3.1 SUBSTRING(str, pos)、SUBSTRING(str, pos, len)
SUBSTRING(str, pos)從字符串str的第pos個(gè)位置開(kāi)始截取,直到字符串結(jié)尾;SUBSTRING(str, pos, len)從第pos個(gè)位置開(kāi)始截取長(zhǎng)度為len的子字符串。
示例:從customers表的phone_number字段中提取后4位號(hào)碼
SELECT phone_number, SUBSTRING(phone_number, -4) AS last_four_digits FROM customers;
3.2 LEFT(str, len)、RIGHT(str, len)
LEFT(str, len)返回字符串str最左邊len個(gè)字符,RIGHT(str, len)返回最右邊len個(gè)字符。
示例:獲取orders表中order_number字段的前3位和后3位
SELECT order_number,
LEFT(order_number, 3) AS first_three_digits,
RIGHT(order_number, 3) AS last_three_digits
FROM orders;
3.3 MID(str, pos, len)
MID(str, pos, len)與SUBSTRING(str, pos, len)功能一致,從字符串str的第pos個(gè)位置開(kāi)始截取長(zhǎng)度為len的子字符串。
SELECT MID('MySQL字符串函數(shù)', 4, 6) AS extracted_substring;
四、字符串連接與拆分函數(shù)
4.1 CONCAT(str1, str2, …)
CONCAT(str1, str2, ...)用于將多個(gè)字符串連接成一個(gè)字符串。
示例:將employees表中的first_name和last_name連接成完整姓名
SELECT CONCAT(first_name,'', last_name) AS full_name FROM employees;
4.2 CONCAT_WS(separator, str1, str2, …)
CONCAT_WS(separator, str1, str2, ...)使用指定的分隔符separator連接多個(gè)字符串,遇到NULL值時(shí)會(huì)跳過(guò),不會(huì)返回NULL。
示例:用逗號(hào)連接products表中的product_name和category字段
SELECT CONCAT_WS(', ', product_name, category) AS product_info
FROM products;
4.3 GROUP_CONCAT(expr)
GROUP_CONCAT(expr)將分組后的結(jié)果集中的expr列值連接成一個(gè)字符串,默認(rèn)用逗號(hào)分隔。
示例:查詢(xún)每個(gè)department的所有employee_name
SELECT department, GROUP_CONCAT(employee_name) AS employees FROM employees GROUP BY department;
五、字符串查找與匹配函數(shù)
5.1 INSTR(str, substr)
INSTR(str, substr)返回子字符串substr在字符串str中第一次出現(xiàn)的位置,不存在則返回0。
示例:在customers表的email字段中查找@符號(hào)的位置
SELECT email, INSTR(email, '@') AS at_position FROM customers;
5.2 LOCATE(substr, str)、POSITION(substr IN str)
這兩個(gè)函數(shù)與INSTR(str, substr)功能相同,都是返回子字符串在字符串中首次出現(xiàn)的位置。
SELECT LOCATE('world', 'Hello, world!') AS locate_result,
POSITION('world' IN 'Hello, world!') AS position_result;
5.3 LIKE、NOT LIKE
LIKE用于模糊匹配,配合通配符%(匹配任意字符序列)和_(匹配單個(gè)字符)使用;NOT LIKE則是取反。
示例:查詢(xún)customers表中姓名以“張”開(kāi)頭的客戶(hù)
SELECT * FROM customers WHERE customer_name LIKE '張%';
5.4 REGEXP、NOT REGEXP
REGEXP支持正則表達(dá)式匹配,NOT REGEXP為取反。
示例:查詢(xún)products表中product_name包含數(shù)字的產(chǎn)品
SELECT product_name FROM products WHERE product_name REGEXP '[0-9]';
六、字符串轉(zhuǎn)換與格式化函數(shù)
6.1 UPPER(str)、LOWER(str)
UPPER(str)將字符串轉(zhuǎn)換為大寫(xiě),LOWER(str)轉(zhuǎn)換為小寫(xiě)。
示例:將employees表中的email字段統(tǒng)一轉(zhuǎn)換為小寫(xiě)
SELECT LOWER(email) AS lower_email FROM employees;
6.2 TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
TRIM()用于去除字符串兩端的空格或指定字符,LEADING去除開(kāi)頭,TRAILING去除結(jié)尾,BOTH(默認(rèn))去除兩端。
示例:去除customers表中address字段兩端的空格
SELECT TRIM(address) AS trimmed_address FROM customers;
6.3 LPAD(str, len, padstr)、RPAD(str, len, padstr)
LPAD(str, len, padstr)在字符串str左側(cè)填充padstr,使其長(zhǎng)度達(dá)到len;RPAD(str, len, padstr)在右側(cè)填充。
示例:將orders表中的order_id填充為8位,左側(cè)補(bǔ)0
SELECT LPAD(order_id, 8, '0') AS padded_order_id FROM orders;
七、字符串加密與解密函數(shù)
7.1 MD5(str)
MD5(str)計(jì)算字符串str的MD5哈希值,常用于密碼加密(但安全性較低,不建議用于敏感數(shù)據(jù))。
SELECT MD5('password') AS md5_hash;
7.2 SHA(str)、SHA2(str, hash_length)
SHA(str)計(jì)算字符串的SHA-1哈希值,SHA2(str, hash_length)計(jì)算SHA-2系列哈希值,hash_length可選224、256、384、512。
SELECT SHA('data'), SHA2('data', 256) AS sha2_256_hash;
八、實(shí)戰(zhàn)案例
8.1 日志分析
在日志表logs中,字段log_message記錄了操作信息,需求是提取其中的操作類(lèi)型(以[開(kāi)頭,]結(jié)尾的部分)。
SELECT SUBSTRING(log_message, INSTR(log_message, '[') + 1, INSTR(log_message, ']') - INSTR(log_message, '[') - 1) AS operation_type FROM logs;
8.2 用戶(hù)數(shù)據(jù)清洗
對(duì)users表中的phone_number字段進(jìn)行處理,去除非數(shù)字字符,并統(tǒng)一格式為XXX-XXXX-XXXX。
SELECT CONCAT(
LEFT(TRIM(REGEXP_REPLACE(phone_number, '[^0-9]', '')), 3),
'-',
MID(TRIM(REGEXP_REPLACE(phone_number, '[^0-9]', '')), 4, 4),
'-',
RIGHT(TRIM(REGEXP_REPLACE(phone_number, '[^0-9]', '')), 4)
) AS formatted_phone_number
FROM users;
到此這篇關(guān)于MySQL常用字符串函數(shù)示例和場(chǎng)景介紹的文章就介紹到這了,更多相關(guān)mysql字符串函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中JSON數(shù)據(jù)類(lèi)型完全指南(從基礎(chǔ)到高級(jí))
在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的時(shí)代,MySQL作為最受歡迎的關(guān)系型數(shù)據(jù)庫(kù)之一,不斷演進(jìn)以滿足現(xiàn)代應(yīng)用的需求,JSON數(shù)據(jù)類(lèi)型的引入,讓MySQL在保持關(guān)系型數(shù)據(jù)庫(kù)優(yōu)勢(shì)的同時(shí),也具備了處理半結(jié)構(gòu)化數(shù)據(jù)的能力,本文將深入探討MySQL JSON數(shù)據(jù)類(lèi)型的方方面面2025-07-07
Mysql計(jì)算n日留存率的實(shí)現(xiàn)
本文主要介紹了Mysql計(jì)算n日留存率的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
CentOS 5.5下安裝MySQL 5.5全過(guò)程分享
網(wǎng)絡(luò)上有很多相關(guān)的安裝筆記,但是并不詳盡,或是編譯環(huán)境稍有不同,過(guò)程就會(huì)有差異,所以我總結(jié)了已有的經(jīng)驗(yàn)和我自己安裝過(guò)程中的體驗(yàn),擴(kuò)充并詳盡地記錄了整個(gè)過(guò)程。我選擇安裝的是MySQL5.5.27版本。以下是我的安裝筆記2012-09-09
mysql 8.0.16 Win10 zip版本安裝配置圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 8.0 Win10 zip版本安裝配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
聽(tīng)說(shuō)mysql中的join很慢?是你用的姿勢(shì)不對(duì)吧
這篇文章主要介紹了聽(tīng)說(shuō)mysql中的join很慢?是你用的姿勢(shì)不對(duì)吧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09

