1. 程式人生 > >一步一步學MySQL---18 MySQL常用函式(1)

一步一步學MySQL---18 MySQL常用函式(1)

18.1 字串函式

MySQL所支援的字串函式有:

函式 功能
CANCAT(str1,str2,…strn) 連線字串str1、str2、……、strn為一個完整字串
INSERT(str,x,y,instr) 將字串str從第x位置開始,y個字元長的子串替換為字串instr
LOWER(str) 將字串str中所有字元變為小寫
UPPER(str) 將字串str中所有字元變為大寫
LEFT(str,x) 返回字串str最左邊的x個字元
RIGHT(str,x) 返回字串str最右邊的x個字元
LPAD(str,n,pad) 使用字串pad對字串str最左邊進行填充,直到長度為n個字元長度
RPAD(str,n,pad) 使用字串pad對字串str最右邊進行填充,直到長度為n個字元長度
LTRIM(str) 去掉字串str左邊的空格
RTRIM(str) 去掉字串str右邊的空格
REPEAT(str,x) 返回字串str重複z次的結果
REPLACE(str,a,b) 使用字串b替換字串str中所有出現的字串a
STRCMP(str1,str2) 比較字串str1和str2
TRIM(str) 去掉字串str行頭和行尾的空格
SUBSTRING(str,x,y) 返回字串str中從x位置起y個字串長度的字串

18.1.1 合併字串函式CONCAT()和CONCAT_WS()

語法:

CONCAT(S1,S2,…,SN) 或者 CONCAT_WS(SEP,S1,S2,…,SN)

(1)mysql> select concat(“My”,”S”,”QL”) 合併後的字串;
這裡寫圖片描述
(2)mysql> select concat(“My”,”S”,”QL”,NULL) 合併後的字串;
這裡寫圖片描述
(3)mysql> select concat(curdate(),18.35) 合併後的字串;
這裡寫圖片描述
(4)
mysql> select concat_ws(‘|’,curdate(),18.35) 合併後的字串;
這裡寫圖片描述
mysql> select concat_ws(‘-‘,’0514’,88461234) 合併後的字串;
這裡寫圖片描述
mysql> select concat_ws(NULL,’0514’,88461234) 合併後的字串;
這裡寫圖片描述
mysql> select concat_ws(‘-‘,’0514’,NULL,88461234) 合併後的字串;
這裡寫圖片描述

說明:

(1)當函式CONCAT()傳入的引數中有一個NULL時,返回的結果將為NULL。

(2)函式CONCAT()不僅可以接受字串引數,還可以接受其他型別的引數。

(3)函式CONCAT_WS()是函式CONCAT()的特殊形式,其形如CONCAT_WS(SEP,s1,s2,…,sn),與CONCAT()相比,多了一個表示分隔符的SEP引數,即不僅將傳入的引數連線起來,而且還會通過分隔符將各個字串隔開。

(4)函式CONCAT_WS()中分隔符可以是一個字串,也可以是其他引數。如果分隔符是NULL,則返回的結果將為NULL。

(5)函式CONCAT_WS()中當分隔符引數後的值存在NULL時,返回的結果將忽略NULL。

18.1.2 比較字串大小的函式STRCMP()

語法:

STRCMP(str1,str2)

說明:如果引數str1大於str2,則結果返回1;如果引數str1小於str2,則結果返回-1;如果引數str1等於str2,則結果返回0。

mysql> select strcmp(“abc”,”abd”),
-> strcmp(“abc”,”abc”),
-> strcmp(“abc”,”abb”);

這裡寫圖片描述

18.1.3 獲取字串長度函式LENGTH()和字元數函式CHAR_LENGTH()

語法:

LENGTH(str) 或者 CHAR_LENGTH(str)


mysql> select “MySQL” 英文字串,
-> length(“MySQL”) 字串位元組長度,
-> char_length(“MySQL”) 字串字元數,
-> “上海浦東” 中文字串,
-> length(“上海浦東”) 字串位元組長度,
-> char_length(“上海浦東”) 字串字元數;

這裡寫圖片描述

說明:MySQL中,英文字元佔1個位元組;對於漢字字元,如果用的字符集是GBK,則漢字字元佔2個位元組,如果用的字符集是UTF-8,則漢字字元佔3個位元組。由於本機使用的預設字符集是UTF-8

檢視MySQl預設字符集命令:

mysql> SHOW VARIABLES LIKE ‘character%’;

這裡寫圖片描述

mysql> SHOW VARIABLES LIKE ‘collation_%’;

這裡寫圖片描述

18.1.4 實現字母大小寫轉換函式UPPER()和LOWER()

MySQL中可以通過UPPER()和UCASE()函式實現將字串的所有字母轉換成大寫字母。
語法:

UPPER(s) 或者 UCASE(s)


mysql> select “mysql” 字串,
-> upper(‘mysql’) 轉換後字串,
-> ucase(“mysql”) 轉換後字串;

這裡寫圖片描述

MySQL中可以通過LOWER()和LCASE()函式實現將字串的所有字母轉換成大寫字母。
語法:

LOWER(s) 或者 LCASE(s)


mysql> select ‘MYSQL’ 字串,
-> lower(“MYSQL”) 轉換後字串,
-> lcase(‘MYSQL’) 轉換後字串;

這裡寫圖片描述

18.1.5 返回字串位置的函式FIND_IN_SET()

MySQL中通過函式FIND_IN_SET()來獲取相匹配字串的位置。

語法:

FIND_IN_SET(str1,str2)

說明:上述函式返回字串str2中與str1相匹配的字串位置,引數str2中將包含若干個用逗號隔開的字串。

mysql>select find_in_set(‘ShangHai’,’BeiJing,TianJin,NanJing,ShangHai’);

這裡寫圖片描述

18.1.6 返回指定字串位置的函式FIELD()

MySQL中通過函式FIELD()來獲取相匹配字串的位置

語法:

FIELD(str,str1,str2,…)

說明:上述函式返回第一個與字串str相匹配的字串的位置

mysql> select field(‘ShangHai’,’BeiJing’,’TianJin’,’NanJing’,’ShangHai’);

這裡寫圖片描述

18.1.7 返回字串相匹配的開始位置

MySQL中通過三個函式來獲取子字串相匹配的開始位置,分別是LOCATE()、POSITION()和INSTR()。

語法:

LOCATE(str1,str) //返回引數str中字串str1的開始位置

POSITION(str1 in str) //返回引數str中字串str1的開始位置

INSTR(str, str1) //返回引數str中字串str1的開始位置


mysql> select locate(‘SQL’, ‘MySQl’),
-> position(‘SQL’ in ‘MySQL’),
-> instr(‘MySQL’, ‘SQL’);

這裡寫圖片描述

18.1.8 返回指定位置的字串ELT()函式

MySQL中通過函式ELT()來獲取指定位置的字串。

語法:

ELT(n,str1,str2…) //返回第n和字串


mysql> select elt(3,’ShangHai’,’BeiJing’,’TianJin’,’NanJing’,’HangZhou’);

這裡寫圖片描述

18.1.9 選擇字串的MAKE_SET()函式

MySQL中通過函式MAKE_SET()來獲取字串。

語法:

MAKE_SET(num,str1,str2,..strn)

說明:上述函式首先將num轉換成二進位制數,然後按照二進位制數從引數str1,str2,…,strn中選擇相應的字串。在通過二進位制數來選擇字串時,按從右到左的順序讀取該值,如果值為1,則選擇該字串,否則不選該字串。

例如:

mysql> select bin(5) 二進位制數,make_set(5,’ShangHai’,’BeiJing’,’Tianjin’,’NanJing’,’HangZhou’),
-> bin(7) 二進位制數,make_set(7,’ShangHai’,’BeiJing’,’Tianjin’,’NanJing’,’HangZhou’);

這裡寫圖片描述

說明:由於數值5的二進位制數為101,所以選擇第一個和第三個字串;數值7的二進位制數為111,所以選擇第一個、第二個和第三個字串

18.1.10 從現有字串中擷取子字串

(1)從左邊或右邊擷取子字串
語法:

LEFT(str,num) //返回字串str中的包含前num個字母(從左邊數)的字串
RIGHT(str,num) //返回字串str中的包含後num個字母(從右邊數)的字串

例如:

mysql> select “MySQL” 字串,
-> left(“MySQL”,2) 前2個字母的字串,
-> right(“MySQL”,3) 後3個字母的字串;

這裡寫圖片描述

(2)擷取指定位置和長度的子字串
語法:

SUBSTRING(str,num,len) 和MID(str,num,len) //返回字串str中的第num個位置開始長度為len的子字串

例如:

mysql> select “oraclemysql” 字串,
-> substring(“oraclemysql”,7,5) 擷取的子字串,
-> mid(“oraclemysql”,7,5) 擷取的子字串;

這裡寫圖片描述

18.1.11 去除字串首尾的空格

(1)去除字串開始處的空格

語法:

LTRIM(str) //返回去掉開始處空格的字串

例如:

執行SQl語句LTRIM()函式,去除掉字串“ MySQL ”左邊的空格。在具體處理時,操作的字串為“ MySQL ”,該字串的左右兩邊各有一個空格。因為空格顯示不太明顯,所以在該字串左右兩邊與字元“-”連線起來。

mysql> select concat(‘-‘,’ MySQL ‘,’-‘) 原來的字串,
-> char_length(concat(‘-‘,’ MySQL ‘,’-‘)) 原來的字串長度,
-> concat(‘-‘,ltrim(’ MySQL ‘),’-‘) 去除開始空格後的字串,
-> char_length(concat(‘-‘,ltrim(’ MySQL ‘),’-‘)) 去除開始空格後的字串長度

這裡寫圖片描述

(2)去除字串結尾處的空格

語法:

RTRIM(str) //返回去掉結尾處空格的字串

例如:

執行SQl語句RTRIM()函式,去除掉字串“ MySQL ”左邊的空格。在具體處理時,操作的字串為“ MySQL ”,該字串的左右兩邊各有一個空格。因為空格顯示不太明顯,所以在該字串左右兩邊與字元“-”連線起來。

mysql> select concat(‘-‘,’ MySQL ‘,’-‘) 原來的字串,
-> char_length(concat(‘-‘,’ MySQL ‘,’-‘)) 原來的字串長度,
-> concat(‘-‘,rtrim(’ MySQL ‘),’-‘) 去除結尾空格後的字串,
-> char_length(concat(‘-‘,rtrim(’ MySQL ‘),’-‘)) 去除結尾空格後的字串長度;

這裡寫圖片描述

(3)去除字串首尾處的空格

語法:

TRIM(str) //返回去掉結尾處空格的字串

例如:

執行SQl語句TRIM()函式,去除掉字串“ MySQL ”左邊的空格。在具體處理時,操作的字串為“ MySQL ”,該字串的左右兩邊各有一個空格。因為空格顯示不太明顯,所以在該字串左右兩邊與字元“-”連線起來。

mysql> select concat(‘-‘,’ MySQL ‘,’-‘) 原來的字串,
-> char_length(concat(‘-‘,’ MySQL ‘,’-‘)) 原來的字串長度,
-> concat(‘-‘,trim(’ MySQL ‘),’-‘) 去除首尾空格後的字串,
-> char_length(concat(‘-‘,trim(’ MySQL ‘),’-‘)) 去除首尾空格後的字串長度;

這裡寫圖片描述

18.1.12 替換字串

(1)使用INSERT()函式

語法:

INSERT(str,pos,len,newstr) //將字串str中的pos位置開始的len長度的字串用newstr字串替換

注意:

  • 如果引數pos的值超過str字串長度,則返回值為原始字串str;
  • 如果len的長度大於原來字串str中所剩字串的長度,則從位置pos開始進行全部替換;
  • 若任何一個引數為NULL,則返回值為NULL。

例如:

mysql> select “這裡是MySQl資料庫管理系統” 字串,
-> insert(“這裡是MySQl資料庫管理系統”,4,5,”Redis”) 轉換後的字串;

這裡寫圖片描述

mysql> select “這裡是MySQl資料庫管理系統” 字串,
-> insert(“這裡是MySQl資料庫管理系統”,16,5,”Redis”) 轉換後的字串;

這裡寫圖片描述

mysql> select “這裡是MySQl資料庫管理系統” 字串,
-> insert(“這裡是MySQl資料庫管理系統”,17,5,”Redis”) 轉換後的字串;

這裡寫圖片描述

注意:我們看到字串“這裡是MySQL資料庫管理系統”一共有15個字元,為什麼我們從第16和第17位置處(均大於15)替換的結果不一樣?這是因為,MySQL中,字串的末尾有一個‘\0’字元,所以從第16位置處替換還沒有超出原來字串的長度,而從第17位置處替換就是超出了原來字串的長度了,所以後者返回原來的字串。

mysql> select “這裡是MySQl資料庫管理系統” 字串,
-> insert(“這裡是MySQl資料庫管理系統”,4,14,”Redis”) 轉換後的字串;

這裡寫圖片描述

(2)使用REPLACE()函式

語法:

REPLACE(str,substr,newstr) //將str中的子字串substr用新字串newstr替換

例如:

mysql> select “這裡是MySQl資料庫管理系統” 字串,
-> replace(“這裡是MySQl資料庫管理系統”,”MySQl”,”Redis”) 替換後的字元;

這裡寫圖片描述