MySQL切分函數(shù)substring()的具體使用
MySQL字符串截取函數(shù)主要有:left(), right(), substring(), substring_index() 四種。各有其使用場景。今天,讓我?guī)Т蠹一◣追昼姇r間來熟知它們,Mark!
聲明一下:在MySQL中,下標索引是從1開始的,而不是像java中從0開始的喔!
一、LEFT() 函數(shù)
LEFT(string,length) ,從字符串string左邊第一位開始,截取長度為length個字符。length應(yīng)大于0,如<=0,返回空字符串。示例如下:
mysql> SELECT LEFT('www.csdn.net',5) from web_info w; +------------------+ | LEFT('www.csdn.net',5) | +------------------+ | www.c | +------------------+ 1 row in set (0.00 sec)
二、RIGHT() 函數(shù)
LEFT(string,length) ,從字符串string右邊第一位開始,截取長度為length個字符,仍然是正向順序截取。length應(yīng)大于0,如<=0,返回空字符串。
mysql> SELECT RIGHT('www.csdn.net',5) from web_info w; +-------------------------+ | RIGHT('www.csdn.net',5) | +-------------------------+ | n.net | +-------------------------+ 1 row in set (0.00 sec)
三、SUBSTRING() 函數(shù)
substring()是專門用來對字符串進行切分的函數(shù),主要有兩種形式:
- SUBSTRING(string,position);
- SUBSTRING(string,position,length);
以下是上述兩類語句的SQL標準版本寫法,意義相同,它更長,但更具表現(xiàn)力。
SUBSTRING(string FROM position); SUBSTRING(string FROM position FOR length);
下面讓我們來一起看一下SUBSTRING()的兩種用法示例;
1.SUBSTRING(string,position)
- string:參數(shù)是要操作的字符串。
- position: 參數(shù)是一個
"整數(shù)"
,用于指定子串的起始字符,position可以是正整數(shù)或負整數(shù)。若position大于操作字符串的長度,則返回空字符串。
例如,從“www.csdn.net”字符串中獲取子字符串:“csdn.net”,子串的位置必須從5開始,如以下SELECT語句:
mysql> SELECT substring('www.csdn.net',5) from web_info w; +-----------------------------+ | substring('www.csdn.net',5) | +-----------------------------+ | csdn.net | +-----------------------------+ 1 row in set (0.00 sec)
2.SUBSTRING(string,position,length)
除了string和position參數(shù)之外,SUBSTRING函數(shù)還有一個length參數(shù)。length是一個正整數(shù)
,用于指定子字符串的字符數(shù)。如果length<=0,那么會返回空字符串。
例如,獲取www.csdn.net中的csdn,SQL如下:
mysql> SELECT substring('www.csdn.net',5,4) from web_info w; +-------------------------------+ | substring('www.csdn.net',5,4) | +-------------------------------+ | csdn | +-------------------------------+ 1 row in set (0.00 sec)
或者通過配置position,從后往前數(shù);SQL如下:
mysql> SELECT substring('www.csdn.net',-8,4) from web_info w; +--------------------------------+ | substring('www.csdn.net',-8,4) | +--------------------------------+ | csdn | +--------------------------------+ 1 row in set (0.00 sec)
又或者通過SQL標準方式來寫,SQL如下:
mysql> SELECT substring('www.csdn.net' FROM 5 FOR 4) from web_info w; +----------------------------------------+ | substring('www.csdn.net' FROM 5 FOR 4) | +----------------------------------------+ | csdn | +----------------------------------------+ 1 row in set (0.00 sec)
另外,MySQL中的 mid(), substr() 等價于 substring() 函數(shù)哦!
四、SUBSTRING_INDEX() 函數(shù)
SUBSTRING_INDEX(str,delim,count),是一個通過特定標識符"delim"來截取子串的函數(shù),我們?nèi)粘J褂妙l率是很高的;
- delim:通過該標識符來進行截取的,delim可以為任意字符,不要為空;
- count:代表第幾次出現(xiàn);count為正數(shù),代表取標識符出現(xiàn)第count次之前的子串;負數(shù)則相反,取標識符出現(xiàn)第count次之后的子串。
例如:‘www.csdn.net',獲取第一次出現(xiàn)標識符'.'前面的子串,SQL如下;
mysql> SELECT SUBSTRING_INDEX('www.csdn.net','.',1) from web_info w; +---------------------------------------+ | SUBSTRING_INDEX('www.csdn.net','.',1) | +---------------------------------------+ | www | +---------------------------------------+ 1 row in set (0.00 sec)
獲取第一次出現(xiàn)標識符'.'后面的子串,SQL如下;
mysql> SELECT SUBSTRING_INDEX('www.csdn.net','.',-2) from web_info w; +----------------------------------------+ | SUBSTRING_INDEX('www.csdn.net','.',-2) | +----------------------------------------+ | csdn.net | +----------------------------------------+ 1 row in set (0.00 sec)
想獲取兩個'.'中間的呢?可以嵌套一下,SQL如下;
mysql> SELECT SUBSTRING_INDEX(substring_index('www.csdn.net','.',2),'.',-1) from web_info w; +---------------------------------------------------------------+ | SUBSTRING_INDEX(substring_index('www.csdn.net','.',2),'.',-1) | +---------------------------------------------------------------+ | csdn | +---------------------------------------------------------------+ 1 row in set (0.00 sec)
五、實戰(zhàn)操作
我們以表web_info為測試表,數(shù)據(jù)如下;
mysql> select * from web_info; +------+--------+----------------+---------------------+ | w_id | w_name | w_domain | pub_time | +------+--------+----------------+---------------------+ | 1 | CSDN | www.csdn.net | 2020-09-03 11:29:29 | | 5 | 百度 | www.baidu.com | 2020-09-18 14:37:38 | | 6 | 淘寶 | www.taobao.com | 2020-09-03 14:37:57 | +------+--------+----------------+---------------------+ 3 rows in set (0.00 sec)
需求1:獲取web_info數(shù)據(jù)的一級域名;
注:這里僅用于舉例說明,與實際會有些出入,如.com.cn那種多級后綴就需另外處理。
mysql> SELECT SUBSTRING_INDEX(w_domain,'.',-2),w.* from web_info w; +----------------------------------+------+--------+----------------+---------------------+ | SUBSTRING_INDEX(w_domain,'.',-2) | w_id | w_name | w_domain | pub_time | +----------------------------------+------+--------+----------------+---------------------+ | csdn.net | 1 | CSDN | www.csdn.net | 2020-09-03 11:29:29 | | baidu.com | 5 | 百度 | www.baidu.com | 2020-09-18 14:37:38 | | taobao.com | 6 | 淘寶 | www.taobao.com | 2020-09-03 14:37:57 | +----------------------------------+------+--------+----------------+---------------------+ 3 rows in set (0.00 sec)
需求2:把w_domain字段數(shù)據(jù)都改成一級域名;
update web_info set w_domain = SUBSTRING_INDEX(w_domain,'.',-2) ;
修改后查詢:
mysql> SELECT * from web_info; +------+--------+------------+---------------------+ | w_id | w_name | w_domain | pub_time | +------+--------+------------+---------------------+ | 1 | CSDN | csdn.net | 2020-09-03 14:54:59 | | 5 | 百度 | baidu.com | 2020-09-03 14:54:59 | | 6 | 淘寶 | taobao.com | 2020-09-03 14:54:59 | +------+--------+------------+---------------------+ 3 rows in set (0.00 sec)
好了,MySQL的字符串切分函數(shù)今天就說到這兒,如果對小伙伴兒有用,請不要白嫖哦~~
到此這篇關(guān)于MySQL切分函數(shù)substring()的具體使用的文章就介紹到這了,更多相關(guān)MySQL切分函數(shù)substring內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決mysql數(shù)據(jù)庫數(shù)據(jù)遷移達夢數(shù)據(jù)亂碼問題
最近接手一個java項目,需要進行重構(gòu),使用國產(chǎn)數(shù)據(jù)庫達夢8替換mysql數(shù)據(jù)庫需要滿足這個要求,在遷移過程中遇到mysql數(shù)據(jù)庫數(shù)據(jù)遷移達夢數(shù)據(jù)亂碼問題,怎么解決呢,下面把過程分享給大家一起看看吧2021-08-08