-- MySQL 字符串函數(shù)
-- 函數(shù) 描述 實(shí)例
-- ASCII(s) 返回字符串 s 的第一個(gè)字符的 ASCII 碼。
#返回CDA字符串第一個(gè)字母的 ASCII 碼:
SELECT ASCII('CDA') AS NumCodeOfFirstChar;
SELECT ASCII('數(shù)據(jù)分析') AS NumCodeOfFirstChar; #漢字也有返回值
#FROM Customers;
-- CHAR_LENGTH(s) 返回字符串 s 的字符數(shù)
#返回字符串 RUNOOB 的字符數(shù)
SELECT CHAR_LENGTH("CDA") AS LengthOfString;
SELECT CHAR_LENGTH("數(shù)據(jù)分析師一級(jí)認(rèn)證考試") AS LengthOfString;
-- CHARACTER_LENGTH(s) 返回字符串 s 的字符數(shù)
#返回字符串 RUNOOB 的字符數(shù)
SELECT CHARACTER_LENGTH("RUNOOB") AS LengthOfString;
-- CONCAT(s1,s2...sn) 字符串 s1,s2 等多個(gè)字符串合并為一個(gè)字符串
#合并多個(gè)字符串
SELECT CONCAT("CDA ", "數(shù)據(jù)分析 ", "一級(jí)", "認(rèn)證考試") AS ConcatenatedString;
-- CONCAT_WS(x, s1,s2...sn) 同 CONCAT(s1,s2,...) 函數(shù),但是每個(gè)字符串之間要加上 x,x 可以是分隔符
#合并多個(gè)字符串,并添加分隔符:
SELECT CONCAT_WS("-", "EXCEL", "BI", "SQL", "統(tǒng)計(jì)學(xué)","CDA一級(jí)要考")AS ConcatenatedString;
-- FIELD(s,s1,s2...) 返回第一個(gè)字符串 s 在字符串列表(s1,s2...)中的位置
#返回字符串在列表值中的位置:
SELECT FIELD("CDA", "a", "b", "CDA", "LEVEL", "1");
-- FIND_IN_SET(s1,s2) 返回在字符串s2中與s1匹配的字符串的位置
#返回字符串 c 在指定字符串中的位置:
SELECT FIND_IN_SET("c", "a,b,c,d,e");
-- FORMAT(x,n) 函數(shù)可以將數(shù)字 x 進(jìn)行格式化 "#,###.##", 將 x 保留到小數(shù)點(diǎn)后 n 位,最后一位四舍五入。
#格式化數(shù)字 "#,###.##" 形式:給數(shù)字加千分位符并保留2位小數(shù)
SELECT FORMAT(250500.56346, 2); -- 輸出 250,500.56
-- INSERT(s1,x,len,s2) 字符串 s2 替換 s1 的 x 位置開(kāi)始長(zhǎng)度為 len 的字符串
#從字符串第一個(gè)位置開(kāi)始的 6 個(gè)字符替換為 cda:
SELECT INSERT("google.com", 1, 6, "runoob"); -- 輸出:runoob.com
-- LOCATE(s1,s) 從字符串 s 中獲取 s1 的開(kāi)始位置
#獲取 b 在字符串 abc 中的位置:
SELECT LOCATE('st','myteststring'); -- 5
# 返回字符串 abc 中 b 的位置:
SELECT LOCATE('b', 'abc');-- 2
-- LCASE(s) 將字符串 s 的所有字母變成小寫(xiě)字母
#字符串 RUNOOB 轉(zhuǎn)換為小寫(xiě):
SELECT LCASE('RUNOOB'); -- runoob
-- LEFT(s,n) 返回字符串 s 的前 n 個(gè)字符
#返回字符串 runoob 中的前兩個(gè)字符:
SELECT LEFT('runoob',2); -- ru
-- LOWER(s) 將字符串 s 的所有字母變成小寫(xiě)字母
#字符串 RUNOOB 轉(zhuǎn)換為小寫(xiě):
SELECT LOWER('RUNOOB'); -- runoob
-- LPAD(s1,len,s2) 在字符串 s1 的開(kāi)始處填充字符串 s2,使字符串長(zhǎng)度達(dá)到 len
#將字符串 xx 填充到 abc 字符串的開(kāi)始處:
SELECT LPAD('abc',5,'xx'); -- xxabc
-- LTRIM(s) 修剪掉字符串 s 開(kāi)始處的空格 #trim 修剪
#去掉字符串 RUNOOB開(kāi)始處的空格:
SELECT LTRIM(" RUNOOB") AS LeftTrimmedString;-- RUNOOB
-- MID(s,n,len) 從字符串 s 的 n 位置截取長(zhǎng)度為 len 的子字符串,同 SUBSTRING(s,n,len)
#從字符串"CDA數(shù)據(jù)分析師一級(jí)考試"中的第 4 個(gè)位置開(kāi)始截取 5個(gè) 字符:
SELECT MID("CDA數(shù)據(jù)分析師一級(jí)考試", 4, 5) AS ExtractString; -- 數(shù)據(jù)分析師
-- POSITION(s1 IN s) 從字符串 s 中獲取 s1 的開(kāi)始位置
# 返回字符串 abc 中 b 的位置:
SELECT POSITION('b' in 'abc'); -- 2
-- REPEAT(s,n) 將字符串 s 重復(fù) n 次
#將字符串 CDA重復(fù)三次:
SELECT REPEAT('CDA',3); -- CDACDACDA
-- REPLACE(s,s1,s2) 用字符串 s2 替代字符串 s 中的字符串 s1
#將字符串 abc 中的字符 a 替換為字符 x:
SELECT REPLACE('CDA一級(jí)考試','一級(jí)','二級(jí)'); -- CDA二級(jí)考試
-- REVERSE(s) 將字符串s的順序反過(guò)來(lái)
# 將字符串 abc 的順序反過(guò)來(lái):
SELECT REVERSE('abc'); -- cba
-- RIGHT(s,n) 返回字符串 s 的后 n 個(gè)字符,從右側(cè)取n個(gè)字符
# 返回字符串 'CDA' 的后兩個(gè)字符:
SELECT RIGHT('CDA',2); -- DA
-- RPAD(s1,len,s2) 在字符串 s1 的結(jié)尾處添加字符串 s2,使字符串的長(zhǎng)度達(dá)到 len
# 將字符串 xx 填充到 abc 字符串的結(jié)尾處:
SELECT RPAD('abc',5,'xx'); -- abcxx
-- RTRIM(s) 去掉字符串 s 結(jié)尾處的空格,#從右側(cè)開(kāi)始去掉空格
# 去掉字符串 RUNOOB 的末尾空格:
SELECT RTRIM("RUNOOB ") AS RightTrimmedString; -- RUNOOB
-- SPACE(n) 返回 n 個(gè)空格
#返回 10 個(gè)空格:
SELECT SPACE(10);
-- STRCMP(s1,s2) 比較字符串 s1 和 s2,如果 s1 與 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
#比較字符串:
SELECT STRCMP("runoob", "runoob"); -- 0
-- SUBSTR(s, start, length) 從字符串 s 的 start 位置截取長(zhǎng)度為 length 的子字符串
# 從字符串 RUNOOB 中的第 2 個(gè)位置截取 3個(gè) 字符:
SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO
-- SUBSTRING(s, start, length) 從字符串 s 的 start 位置截取長(zhǎng)度為 length 的子字符串
#從字符串 RUNOOB 中的第 2 個(gè)位置截取 3個(gè) 字符:
SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO
-- SUBSTRING_INDEX(s, delimiter, number) 返回從字符串 s 的第 number 個(gè)出現(xiàn)的分隔符(delimiter) 之后的子串。
#如果 number 是正數(shù),返回第 number 個(gè)分隔符左邊的字符串。
#如果 number 是負(fù)數(shù),返回第(number 的絕對(duì)值(從右邊數(shù)))個(gè)分隔符右邊的字符串。
SELECT SUBSTRING_INDEX('a*b','*',1); -- a
SELECT SUBSTRING_INDEX('a*b','*',-1); -- b
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1); -- c
-- TRIM(s) 修剪掉字符串 s 開(kāi)始和結(jié)尾處的空格
#去掉字符串 RUNOOB 的首尾空格:
SELECT TRIM(' RUNOOB ') AS TrimmedString;
-- UCASE(s) 將字符串轉(zhuǎn)換為大寫(xiě)
#將字符串 runoob 轉(zhuǎn)換為大寫(xiě):
SELECT UCASE("runoob"); -- RUNOOB
-- UPPER(s) 將字符串轉(zhuǎn)換為大寫(xiě)
#將字符串 runoob 轉(zhuǎn)換為大寫(xiě):
SELECT UPPER("runoob"); -- RUNOOB
-- 練習(xí):查詢各部門員工人數(shù)占比(以百分比顯示)
select deptno,concat(
(round(count(empno)/(select count(empno) from emp),2)*100), # 變成21
'%') 員工占比
from emp
group by deptno;








暫無(wú)數(shù)據(jù)