天天看點

MySQL 資料庫中 substring() 字元截取和 concat() 字元拼接

1、MySQL中,substring() 是截取字元串函數

  • 使用文法為:
select substring(str,pos)
select substring(str from pos)
select substring(str,pos,len)
select substring(str from pos for len)
select substring('helloWorld', 6, 5)   # 傳回結果是 "World"      
  • 參數解釋:
    • 第一個參數 str 為要截取的字元串
    • 第二個參數 pos 是從第幾個字元開始(包括這個字元)截取  
    • 第三個參數 len 是表示想要截取的字元串的長度
    • 如果隻有兩個參數則表示從第 pos 個字元開始截取到最後一個字元  
    • pos 的值是可以為負數的,當 pos 為 -5 時則表示從字元串的倒數第 5 個字元開始截取
select substring('helloWorld', -5, 3)     # 結果為:"Wor"      
  • 執行個體用法:
select substring(rand(), 3, 6)    # 随機生成一個 6 位數的字元串      
MySQL 資料庫中 substring() 字元截取和 concat() 字元拼接

2、MySQL中,concat() 是拼接字元串

  • concat(str1,str2,…) 
    • 傳回結果為連接配接參數産生的字元串。如有任何一個參數為 NULL ,則傳回值為 NULL 
  • MySQL 的 concat 函數可以連接配接一個或者多個字元串,如

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

mysql>

select

concat(

'10'

);

+

--------------+

| concat(

'10'

) |

+

--------------+

| 10  |

+

--------------+

1 row

in

set

(0.00 sec)

mysql>

select

concat(

'11'

,

'22'

,

'33'

);

+

------------------------+

| concat(

'11'

,

'22'

,

'33'

) |

+

------------------------+

| 112233 |

+

------------------------+

1 row

in

set

(0.00 sec)

  • MySQL 的 concat 函數在連接配接字元串的時候,隻要其中一個是 NULL,那麼将傳回 NULL

mysql>

select

concat(

'11'

,

'22'

,

null

);

+

------------------------+

| concat(

'11'

,

'22'

,

null

) |

+

------------------------+

|

NULL

|

+

------------------------+

1 row

in

set

(0.00 sec)

3、MySQL 中 concat_ws 函數

  • CONCAT_WS(separator,str1,str2,...)
  • CONCAT_WS() 代表 CONCAT With Separator ,是 CONCAT() 的特殊形式。第一個參數是其它參數的分隔符。分隔符的位置放在要連接配接的兩個字元串之間。分隔符可以是一個字元串,也可以是其它參數。
  • 注意:
    • 如果分隔符為 NULL,則結果為 NULL。函數會忽略任何分隔符參數後的 NULL 值。  
    • 如連接配接後以逗号分隔  

mysql>

select

concat_ws(

','

,

'11'

,

'22'

,

'33'

);

+

-------------------------------+

| concat_ws(

','

,

'11'

,

'22'

,

'33'

) |

+

-------------------------------+

| 11,22,33 |

+

-------------------------------+

1 row

in

set

(0.00 sec)

  • 和 MySQL 中 concat 函數不同的是,concat_ws 函數在執行的時候,不會因為 NULL 值而傳回 NULL

mysql>

select

concat_ws(

','

,

'11'

,

'22'

,

NULL

);

+

-------------------------------+

| concat_ws(

','

,

'11'

,

'22'

,

NULL

) |

+

-------------------------------+

| 11,22 |

+

-------------------------------+

1 row

in

set

(0.00 sec)

4、MySQL 中 group_concat 函數

  • group_concat([DISTINCT] 要連接配接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

mysql>

select

*

from

aa;

+

------+------+

| id|

name

|

+

------+------+

|1 | 10|

|1 | 20|

|1 | 20|

|2 | 20|

|3 | 200  |

|3 | 500  |

+

------+------+

6

rows

in

set

(0.00 sec)

  • 以 id 分組,把 name 字段的值列印在一行,逗号分隔(預設)

mysql>

select

id,group_concat(

name

)

from

aa

group

by

id;

+

------+--------------------+

| id| group_concat(

name

) |

+

------+--------------------+

|1 | 10,20,20|

|2 | 20 |

|3 | 200,500|

+

------+--------------------+

3

rows

in

set

(0.00 sec)

  • 以 id 分組,把 name 字段的值列印在一行,分号分隔

mysql>

select

id,group_concat(

name

separator

';'

)

from

aa

group

by

id;

+

------+----------------------------------+

| id| group_concat(

name

separator

';'

) |

+

------+----------------------------------+

|1 | 10;20;20 |

|2 | 20|

|3 | 200;500  |

+

------+----------------------------------+

3

rows

in

set

(0.00 sec)

  • 以id分組,把去備援的name字段的值列印在一行,逗号分隔

mysql>

select

id,group_concat(

distinct

name

)

from

aa

group

by

id;

+

------+-----------------------------+

| id| group_concat(

distinct

name

) |

+

------+-----------------------------+

|1 | 10,20|

|2 | 20  |

|3 | 200,500 |

+

------+-----------------------------+

3

rows

in

set

(0.00 sec)

  • 以 id 分組,把 name 字段的值列印在一行,逗号分隔,以 name 排倒序

mysql>

select

id,group_concat(

name

order

by

name

desc

)

from

aa

group

by

id;

+

------+---------------------------------------+

| id| group_concat(

name

order

by

name

desc

) |

+

------+---------------------------------------+

|1 | 20,20,10  |

|2 | 20|

|3 | 500,200|

+

------+---------------------------------------+

3

rows

in

set

(0.00 sec)

5、repeat()函數

  • 用來複制字元串,如下 'ab' 表示要複制的字元串,2 表示複制的份數

mysql>

select

repeat(

'ab'

,2);

+

----------------+

| repeat(

'ab'

,2) |

+

----------------+

| abab      |

+

----------------+

1 row

in

set

(0.00 sec)

mysql>

select

repeat(

'a'

,2);

+

---------------+

| repeat(

'a'

,2) |

+

---------------+

| aa      |

+

---------------+

1 row

in

set

(0.00 sec)

作者:多測師進階講師_鄭sir

微信:ZhengYing8887

出處:https://www.cnblogs.com/ZhengYing0813/

備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。

繼續閱讀