mysql截取字符串

  • Author:杜七
  • Date:2017.03.15

MySQL 字符串截取函數(shù):left(), right(), substring(), substring_index()。還有 mid(), substr()碴巾。其中挑秉,mid(), substr() 等價于 substring() 函數(shù),substring() 的功能非常強大和靈活蜘矢。

  1. 字符串截取:left(str, length)
    mysql> select left('sqlstudy.com', 3);
    +-------------------------+
    | left('sqlstudy.com', 3) |
    +-------------------------+
    | sql |
    +-------------------------+
  2. 字符串截茸劭础:right(str, length)
    mysql> select right('sqlstudy.com', 3);
    +--------------------------+
    | right('sqlstudy.com', 3) |
    +--------------------------+
    | com |
    +--------------------------+
  3. 字符串截绕犯埂:substring(str, pos); substring(str, pos, len)
    3.1 從字符串的第 4 個字符位置開始取,直到結(jié)束红碑。
    mysql> select substring('sqlstudy.com', 4);
    +------------------------------+
    | substring('sqlstudy.com', 4) |
    +------------------------------+
    | study.com |
    +------------------------------+
    3.2 從字符串的第 4 個字符位置開始取舞吭,只取 2 個字符。
    mysql> select substring('sqlstudy.com', 4, 2);
    +---------------------------------+
    | substring('sqlstudy.com', 4, 2) |
    +---------------------------------+
    | st |
    +---------------------------------+
    3.3 從字符串的第 4 個字符位置(倒數(shù))開始取析珊,直到結(jié)束羡鸥。
    mysql> select substring('sqlstudy.com', -4);
    +-------------------------------+
    | substring('sqlstudy.com', -4) |
    +-------------------------------+
    | .com |
    +-------------------------------+
    3.4 從字符串的第 4 個字符位置(倒數(shù))開始取,只取 2 個字符唾琼。
    mysql> select substring('sqlstudy.com', -4, 2);
    +----------------------------------+
    | substring('sqlstudy.com', -4, 2) |
    +----------------------------------+
    | .c |
    +----------------------------------+
    我們注意到在函數(shù) substring(str,pos, len)中兄春, pos 可以是負值,但 len 不能取負值锡溯。
  4. 字符串截雀嫌摺:substring_index(str,delim,count)
    4.1 截取第二個 '.' 之前的所有字符。
    mysql> select substring_index('www.sqlstudy.com.cn', '.', 2);
    +------------------------------------------------+
    | substring_index('www.sqlstudy.com.cn', '.', 2) |
    +------------------------------------------------+
    | www.sqlstudy |
    +------------------------------------------------+
    4.2 截取第二個 '.' (倒數(shù))之后的所有字符祭饭。
    mysql> select substring_index('www.sqlstudy.com.cn', '.', -2);
    +-------------------------------------------------+
    | substring_index('www.sqlstudy.com.cn', '.', -2) |
    +-------------------------------------------------+
    | com.cn |
    +-------------------------------------------------+
    4.3 如果在字符串中找不到 delim 參數(shù)指定的值芜茵,就返回整個字符串
    mysql> select substring_index('www.sqlstudy.com.cn', '.coc', 1);
    +---------------------------------------------------+
    | substring_index('www.sqlstudy.com.cn', '.coc', 1) |
    +---------------------------------------------------+
    | www.sqlstudy.com.cn |
    +---------------------------------------------------+

ASCII(str)
返回字符串str的最左面字符的ASCII代碼值。如果str是空字符串倡蝙,返回0九串。如果str是NULL,返回NULL。

Java代碼
如:select ASCII('2');select ASCII(2); 結(jié)果都為2的Ascii碼值 50
如:select ASCII('2');select ASCII(2); 結(jié)果都為2的Ascii碼值 50

CHAR(N,...)
CHAR()將參數(shù)解釋為整數(shù)并且返回由這些整數(shù)的ASCII代碼字符組成的一個字符串猪钮。NULL值被跳過品山。

Java代碼
select CHAR(77,121,83,81,NULL); 結(jié)果為 MySQ ;
select CHAR(77,121,83,81,NULL); 結(jié)果為 MySQ 烤低;

[color=darkred]CONCAT(str1,str2,...)
返回來自于參數(shù)連結(jié)的字符串肘交。如果任何參數(shù)是NULL,返回NULL扑馁⊙纳耄可以有超過2個的參數(shù)。一個數(shù)字參數(shù)被變換為等價的字符串形式腻要。

Java代碼
select CONCAT('My', 'S', 'QL'); //MySQL
select CONCAT(12.3); //'12.3'
select CONCAT('My', 'S', 'QL'); //MySQL
select CONCAT(12.3); //'12.3'

LENGTH(str)
計算字符串長度 :select length('text') ; //4

LOCATE(substr,str)  
POSITION(substr IN str)
返回子串substr在字符串str第一個出現(xiàn)的位置复罐,如果substr不是在str里面,返回0.

Java代碼
1.mysql> select LOCATE('bar', 'foobarbar');

  1.    -> 4 
    

3.mysql> select LOCATE('xbar', 'foobar');

  1.    -> 0 
    

mysql> select LOCATE('bar', 'foobarbar');
-> 4
mysql> select LOCATE('xbar', 'foobar');
-> 0該函數(shù)是多字節(jié)可靠的

LOCATE(substr,str,pos)
返回子串substr在字符串str第一個出現(xiàn)的位置雄家,從位置pos開始效诅。如果substr不是在str里面,返回0咳短。

Java代碼
1.mysql> select LOCATE('bar', 'foobarbar',5);

  1.    -> 7 
    

mysql> select LOCATE('bar', 'foobarbar',5);
-> 7

INSTR(str,substr)
返回子串substr在字符串str中的第一個出現(xiàn)的位置填帽。這與有2個參數(shù)形式的LOCATE()相同蛛淋,除了參數(shù)被顛倒咙好。

Java代碼
1.mysql> select INSTR('foobarbar', 'bar');

  1.    -> 4 
    

3.mysql> select INSTR('xbar', 'foobar');

  1.    -> 0 
    

mysql> select INSTR('foobarbar', 'bar');
-> 4
mysql> select INSTR('xbar', 'foobar');
-> 0這函數(shù)是多字節(jié)可靠的。

LPAD(str,len,padstr)
返回字符串str褐荷,左面用字符串padstr填補直到str是len個字符長勾效。

Java代碼
1.<PRE class=java name="code">mysql> select LPAD('hi',4,'??');

  1.    -> '??hi' 
    
  2. [color=darkred]RPAD(str,len,padstr)[/color] </PRE>返回字符串str,右面用字符串padstr填補直到str是len個字符長叛甫。
    Java代碼 mysql> select LPAD('hi',4,'??'); -> '??hi'
    mysql> select LPAD('hi',4,'??');
    -> '??hi'
    [color=darkred]RPAD(str,len,padstr)[/color]
    返回字符串str层宫,右面用字符串padstr填補直到str是len個字符長。
    mysql> select RPAD('hi',5,'?');
    -> 'hi???'
    LEFT(str,len)
    返回字符串str的最左面len個字符其监。

Java代碼
1.mysql> select LEFT('foobarbar', 5);

  1.    -> 'fooba'該函數(shù)是多字節(jié)可靠的萌腿。 
    

mysql> select LEFT('foobarbar', 5);
-> 'fooba'該函數(shù)是多字節(jié)可靠的。
RIGHT(str,len)
返回字符串str的最右面len個字符抖苦。

Java代碼
1.mysql> select RIGHT('foobarbar', 4);

  1.    -> 'rbar' 
    

mysql> select RIGHT('foobarbar', 4);
-> 'rbar'
該函數(shù)是多字節(jié)可靠的毁菱。

SUBSTRING(str,pos)
 
SUBSTRING(str FROM pos)
從字符串str的起始位置pos返回一個子串。
mysql> select SUBSTRING('Quadratically',5);
-> 'ratically'
mysql> select SUBSTRING('foobarbar' FROM 4);
-> 'barbar'
該函數(shù)是多字節(jié)可靠的锌历。
SUBSTRING_INDEX(str,delim,count)
返回從字符串str的第count個出現(xiàn)的分隔符delim之后的子串贮庞。如果count是正數(shù),返回最后的分隔符到左邊(從左邊數(shù)) 的所有字符究西。如果count是負數(shù)窗慎,返回最后的分隔符到右邊的所有字符(從右邊數(shù))。
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
該函數(shù)對多字節(jié)是可靠的。
LTRIM(str)
返回刪除了其前置空格字符的字符串str遮斥。
mysql> select LTRIM(' barbar');
-> 'barbar'
RTRIM(str)
返回刪除了其拖后空格字符的字符串str峦失。
mysql> select RTRIM('barbar ');
-> 'barbar'
該函數(shù)對多字節(jié)是可靠的。
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
返回字符串str术吗,其所有remstr前綴或后綴被刪除了宠进。如果沒有修飾符BOTH、LEADING或TRAILING給出藐翎,BOTH被假定材蹬。如果remstr沒被指定,空格被刪除吝镣。
mysql> select TRIM(' bar ');
-> 'bar'
mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx'
mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');
-> 'bar'
mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');
-> 'barx'
該函數(shù)對多字節(jié)是可靠的堤器。
SOUNDEX(str)
返回str的一個同音字符串。聽起來“大致相同”的2個字符串應(yīng)該有相同的同音字符串末贾。一個“標準”的同音字符串長是4個字符闸溃,但是SOUNDEX()函數(shù)返回一個任意長的字符串。你可以在結(jié)果上使用SUBSTRING()得到一個“標準”的 同音串拱撵。所有非數(shù)字字母字符在給定的字符串中被忽略辉川。所有在A-Z之外的字符國際字母被當(dāng)作元音。
mysql> select SOUNDEX('Hello');
-> 'H400'
mysql> select SOUNDEX('Quadratically');
-> 'Q36324'
SPACE(N)
返回由N個空格字符組成的一個字符串拴测。
mysql> select SPACE(6);
-> ' '
REPLACE(str,from_str,to_str)
返回字符串str乓旗,其字符串from_str的所有出現(xiàn)由字符串to_str代替。
mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
該函數(shù)對多字節(jié)是可靠的集索。
REPEAT(str,count)
返回由重復(fù)countTimes次的字符串str組成的一個字符串屿愚。如果count <= 0,返回一個空字符串务荆。如果str或count是NULL妆距,返回NULL。
mysql> select REPEAT('MySQL', 3);
-> 'MySQLMySQLMySQL'
REVERSE(str)
返回顛倒字符順序的字符串str函匕。
mysql> select REVERSE('abc');
-> 'cba'
該函數(shù)對多字節(jié)可靠的娱据。
INSERT(str,pos,len,newstr)
返回字符串str,在位置pos起始的子串且len個字符長得子串由字符串newstr代替盅惜。
mysql> select INSERT('Quadratic', 3, 4, 'What');
-> 'QuWhattic'
該函數(shù)對多字節(jié)是可靠的中剩。
ELT(N,str1,str2,str3,...)
如果N= 1,返回str1酷窥,如果N= 2咽安,返回str2,等等蓬推。如果N小于1或大于參數(shù)個數(shù)妆棒,返回NULL。ELT()是FIELD()反運算。
mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej'
mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
FIELD(str,str1,str2,str3,...)
返回str在str1, str2, str3, ...清單的索引糕珊。如果str沒找到动分,返回0。FIELD()是ELT()反運算红选。
mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2
mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0
FIND_IN_SET(str,strlist)
如果字符串str在由N子串組成的表strlist之中澜公,返回一個1到N的值。一個字符串表是被“,”分隔的子串組成的一個字符串喇肋。如果第一個參數(shù)是一個常數(shù)字符串并且第二個參數(shù)是一種類型為SET的列坟乾,F(xiàn)IND_IN_SET()函數(shù)被優(yōu)化而使用位運算!如果str不是在strlist里面或如果strlist是空字符串蝶防,返回0甚侣。如果任何一個參數(shù)是NULL,返回NULL间学。如果第一個參數(shù)包含一個“,”殷费,該函數(shù)將工作不正常。
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
MAKE_SET(bits,str1,str2,...)
返回一個集合 (包含由“,”字符分隔的子串組成的一個字符串)低葫,由相應(yīng)的位在bits集合中的的字符串組成详羡。str1對應(yīng)于位0,str2對應(yīng)位1嘿悬,等等实柠。在str1, str2, ...中的NULL串不添加到結(jié)果中。
mysql> SELECT MAKE_SET(1,'a','b','c');
-> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
-> 'hello,world'
mysql> SELECT MAKE_SET(0,'a','b','c');
-> ''
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
返回一個字符串鹊漠,在這里對于在“bits”中設(shè)定每一位主到,你得到一個“on”字符串茶行,并且對于每個復(fù)位(reset)的位躯概,你得到一個“off”字符串。每個字符串用“separator”分隔(缺省“,”)畔师,并且只有“bits”的“number_of_bits” (缺省64)位被使用娶靡。
mysql> select EXPORT_SET(5,'Y','N',',',4)
-> Y,N,Y,N
LCASE(str)
 
LOWER(str) 返回字符串str,根據(jù)當(dāng)前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成小寫看锉。該函數(shù)對多字節(jié)是可靠的姿锭。
mysql> select LCASE('QUADRATICALLY');
-> 'quadratically'
UCASE(str)
返回字符串str,根據(jù)當(dāng)前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成大寫伯铣。該函數(shù)對多字節(jié)是可靠的呻此。
mysql> select UCASE('Hej');
-> 'HEJ'
該函數(shù)對多字節(jié)是可靠的。
LOAD_FILE(file_name)
讀入文件并且作為一個字符串返回文件內(nèi)容腔寡。文件必須在服務(wù)器上焚鲜,你必須指定到文件的完整路徑名,而且你必須有file權(quán)限。文件必須所有內(nèi)容都是可讀的并且小于max_allowed_packet忿磅。如果文件不存在或由于上面原因之一不能被讀出糯彬,函數(shù)返回NULL。
mysql> UPDATE table_name
SET blob_column=LOAD_FILE("/tmp/picture")
WHERE id=1;

MySQL必要時自動變換數(shù)字為字符串葱她,并且反過來也如此:

mysql> SELECT 1+"1";
-> 2
mysql> SELECT CONCAT(2,' test');
-> '2 test'
如果你想要明確地變換一個數(shù)字到一個字符串撩扒,把它作為參數(shù)傳遞到CONCAT()。

如果字符串函數(shù)提供一個二進制字符串作為參數(shù)吨些,結(jié)果字符串也是一個二進制字符串搓谆。被變換到一個字符串的數(shù)字被當(dāng)作是一個二進制字符串。這僅影響比較豪墅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挽拔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子但校,更是在濱河造成了極大的恐慌螃诅,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状囱,死亡現(xiàn)場離奇詭異术裸,居然都是意外死亡,警方通過查閱死者的電腦和手機亭枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門袭艺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叨粘,你說我怎么就攤上這事猾编。” “怎么了升敲?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵答倡,是天一觀的道長。 經(jīng)常有香客問我驴党,道長瘪撇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任港庄,我火速辦了婚禮倔既,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹏氧。我一直安慰自己渤涌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布把还。 她就那樣靜靜地躺著实蓬,像睡著了一般稿存。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞳秽,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天瓣履,我揣著相機與錄音,去河邊找鬼练俐。 笑死袖迎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腺晾。 我是一名探鬼主播燕锥,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悯蝉!你這毒婦竟也來了归形?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鼻由,失蹤者是張志新(化名)和其女友劉穎暇榴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕉世,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蔼紧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狠轻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奸例。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖向楼,靈堂內(nèi)的尸體忽然破棺而出查吊,到底是詐尸還是另有隱情,我是刑警寧澤湖蜕,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布逻卖,位于F島的核電站,受9級特大地震影響重荠,放射性物質(zhì)發(fā)生泄漏箭阶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一戈鲁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘹叫,春花似錦婆殿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怕磨。三九已至,卻和暖如春消约,著一層夾襖步出監(jiān)牢的瞬間肠鲫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工或粮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留导饲,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓氯材,卻偏偏與公主長得像渣锦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氢哮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 1袋毙、字符串函數(shù) ascii(str) 返回字符串str的第一個字符的ascii值(str是空串時返回0) mysq...
    安易學(xué)車閱讀 248評論 0 2
  • 轉(zhuǎn)自公眾號‘java一日一條’ 1.字符串函數(shù) ascii(str) 返回字符串str的第一個字符的ascii值(...
    LOOK_LOOK閱讀 677評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法冗尤,內(nèi)部類的語法听盖,繼承相關(guān)的語法,異常的語法裂七,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • 18690301277
    7a8d215ee054閱讀 166評論 0 0
  • 蒲公英碍讯,請帶我飛悬蔽。 從我落地那一刻開始,就是為了飛起那一刻而活捉兴。 我想飛蝎困,花了半生來等待。 蒲公英倍啥,請帶我飛禾乘。 我...
    頖孫閱讀 239評論 0 2