掌握 MySQL 常用字符串函数:快速提升数据库操作效率

共 8694字,需浏览 18分钟

 ·

2024-07-02 16:30



在 MySQL 中,字符串函数用于处理和操作字符串数据。这些函数在查询和数据处理过程中非常有用。以下是一些常用的 MySQL 字符串函数及其简要说明:


一、常用函数


1.1 ascii(str)


返回值为字符串str的最左字符的数值,即取得最左字符的ascii码。假如str为空字符串,则返回值为0。假如str为null,则返回值为null。






mysql> select ascii('a');
+--------------+
| ascii('a') |
+--------------+
| 97 |
+--------------+
1 row in set (0.00 sec)



1.2 char()


将ascii码转换为字符。如果没有输入0~255之间的ascii码值,char()返回null。


1.3 lower()和upper()


lower()将字符串全部转为小写;
upper()将字符串全部转为大写。






mysql> select lower("HELLO WORLD"), upper("hello world");
+----------------------+----------------------+
| lower("HELLO WORLD") | lower("hello world") |
+----------------------+----------------------+
| hello world | HELLO WORLD |
+----------------------+----------------------+



1.4 str()


把数值型数据转换为字符型数据。


str(<float_expression>[length]
]])length指定返回的字符串的长度,decimal指定返回的小数位数。如果没有指定长度,缺省的length值为10,decimal缺省值为0。当length或者decimal为负值时,返回null;当length小于小数点左边(包括符号位)的位数时,返回length个*;先服从length,再取decimal;当返回的字符串位数小于length,左边补足空格。


二、去空格函数


2.1 trim()


去除两边的空格






mysql> select trim('   bar   ');
+-------------------+
| trim(' bar ') |
+-------------------+
| bar |
+-------------------+
1 row in set (0.13 sec)



指定字符串截取 左边截取字符串






mysql> select trim(leading 'X' from 'XXXXXtrimleadingXXXX');
+-----------------------------------------------+
| trim(leading 'X' from 'XXXXXtrimleadingXXXX') |
+-----------------------------------------------+
| trimleadingXXXX |
+-----------------------------------------------+
1 row in set (0.13 sec)



指定去除字符串右边的xyz,左边截取字符串






mysql> select trim(trailing 'zyz' from 'barxxyz');
+-------------------------------------+
| trim(trailing 'zyz' from 'barxxyz') |
+-------------------------------------+
| barxxyz |
+-------------------------------------+
1 row in set (0.12 sec)



指定去除字符串两边的X






mysql> select trim(both 'X' from 'XXXXXXXtrimbothXXXXXXX');
+----------------------------------------------+
| trim(both 'X' from 'XXXXXXXtrimbothXXXXXXX') |
+----------------------------------------------+
| trimboth |
+----------------------------------------------+
1 row in set (0.13 sec)



2.2 ltrim()


把字符串头部的空格去掉。


2.3 rtrim()


把字符串尾部的空格去掉。


三、取子串函数


3.1 left()


left(<character_expression>,<integer_expression>)返回character_expression左起integer_expression个字符。


3.2 right()


right(<character_expression>,<integer_expression>)返回character_expression右起integer_expression个字符。


3.3 substring()


格式:substring(s,start,length)


从字符串s的start位置截取长度为length的子字符串






mysql> select substring("Hello world", 5);
+-----------------------------+
| substring("Hello world", 5) |
+-----------------------------+
| o world |
+-----------------------------+
1 row in set (0.07 sec)

mysql> select substring("Hello world", 5, 3);
+--------------------------------+
| substring("Hello world", 5, 3) |
+--------------------------------+
| o w |
+--------------------------------+
1 row in set (0.07 sec)

mysql> select substring("Hello world", -5);
+------------------------------+
| substring("Hello world", -5) |
+------------------------------+
| world |
+------------------------------+
1 row in set (0.08 sec)



3.4 substring_index()


格式:substring_index(s,delimiter,number)


返回从字符串s的第number个出现的分隔符delimiter之前的子串;如果number是正数,那么就是从左往右数,返回第number个分隔符的左边的全部内容;相反,如果number是负数,那么就是从右边开始数,第number个分隔符右边的所有内容



注意:如果number超过了实际分隔符的个数,则返回实际个数的字符串



参数说明:



  • str: 待截取的字符串,string类型


  • delimiter: 分隔符,string类型


  • number: 指定分隔符位置,int类型



返回值:


返回string类型字符串,如果任一输入参数为null,则返回null






-- 案例1
select substring_index('a*b','*',1); -- a

-- 案例2
select substring_index('a*b','*',-1); -- b

-- 案例3
select substring_index(substring_index('a*b*c*d*e','*',3),'*',-1); -- c
-- 案例3可拆解成以下两个步骤
select substring_index('a*b*c*d*e','*',3); -- a*b*c
select substring_index('a*b*c','*',-1); -- c

-- 案例4
-- 如果任一输入参数为null,则返回null
select substring_index('https://www.google.com', null, 2);
select substring_index('https://www.google.com', '.', null);
select substring_index(null, '.', 2);

-- 案例5
-- 如果number超过了实际分隔符的个数,则返回实际个数的字符串
-- https://www.google.com
select substring_index('https://www.google.com', '.', 4);



四、字符串比较函数


4.1 charindex()


返回字符串中某个指定的子串出现的开始位置。


charindex(<'substring_expression'>,
)其中substring_expression是所要查找的字符表达式,expression可为字符串也可为列名表达式。如果没有发现子串,则返回0值。此函数不能用于text和image数据类型。


4.2 patindex()


返回字符串中某个指定的子串出现的开始位置。


patindex(<'%substring_expression%'>,<column_name="">)其中子串表达式前后必须有百分号“%”否则返回值为0。与charindex函数不同的是,patindex函数的子串中可以使用通配符,且此函数可用于char、varchar和text数据类型。


五、字符串操作函数


5.1 quotename()


返回被特定字符括起来的字符串。quotename(<'character_expression'>[,quote_character])其中quote_character标明括字符串所用的字符,缺省值为“[]”。


5.2 replicate()


返回一个重复character_expression指定次数的字符串。


replicate(character_expression integer_expression)如果integer_expression值为负值,则返回null。


5.3 reverse()


格式:reverse(s) 其中s可以是字符串、常数或一个列的值。


将指定的字符串的字符排列顺序颠倒。






mysql> select reverse("abcdef");
+-----------------+
| reverse("abcdef") |
+-----------------+
| fedcba |
+-----------------+

1 row in set (0.06 sec)



5.4 replace()


格式: replace(




)



用s3替换在s1中的子串s2。


返回被替换了指定子串的字符串。






mysql> select replace('www.mysql.com','w','W');
+----------------------------------+
| replace('www.mysql.com','w','W') |
+----------------------------------+
| WWW.mysql.com |
+----------------------------------+

1 row in set (0.07 sec)



5.5 space()


返回一个有指定长度的空白字符串。


space(<integer_expression>)如果integer_expression值为负值,则返回null。


5.6 stuff()


用另一子串替换字符串指定位置、长度的子串。


stuff(<character_expression1>,<start_position="">,
,<character_expression2>)


如果起始位置为负或长度值为负,或者起始位置大于character_expression1的长度,则返回null值。


如果length长度大于character_expression1中start_position以右的长度,则character_expression1只保留首字符。


5.7 length()


查看字符串的长度 这里的UTF8 中文是占用两个字节






mysql> select length("text");
+----------------+
| length("text") |
+----------------+
| 4 |
+----------------+

mysql> select length("你好");
+----------------+
| length("你好") |
+----------------+
| 6 |
+----------------+
1 row in set (0.07 sec)



5.8 char_length()


返回一共有多少个字






mysql> select char_length("text");
+---------------------+
| char_length("text") |
+---------------------+
| 4 |
+---------------------+

mysql> select char_length("你好");
+---------------------+
| char_length("你好") |
+---------------------+
| 2 |
+---------------------+
1 row in set (0.07 sec)



5.8 repeat()


repeat(str,count) 将字符串str重复count次后返回






mysql> select repeat('MySQL',3);
+--------------------+
| repeat('MySQL',3) |
+--------------------+
| MySQLMySQLMySQL |
+--------------------+
1 row in set (0.07 sec)



5.9 reverse()


将字符串反转后返回






mysql> select reverse("abcdef");
+-------------------+
| reverse("abcdef") |
+-------------------+
| fedcba |
+-------------------+
1 row in set (0.06 sec)



5.10 format()






mysql> select format(129021,4);
+------------------+
| format(129021,4) |
+------------------+
| 129,021.0000 |
+------------------+
1 row in set (0.07 sec)



5.11 lpad()


位数不够左边补0






mysql> select lpad("hello",10,"0");
+----------------------+
| lpad("hello",10,"0") |
+----------------------+
| 00000hello |
+----------------------+
1 row in set (0.13 sec)



5.12 rpad()


位数不够右边补0






mysql> select rpad("hello",10,"0");
+----------------------+
| rpad("hello",10,"0") |
+----------------------+
| hello00000 |
+----------------------+
1 row in set (0.13 sec)



5.13 instr()


返回字串第一次出现的位置






mysql> select instr("footer","ter"); 
+-----------------------+
| instr("footer","ter") |
+-----------------------+
| 4 |
+-----------------------+
1 row in set (0.07 sec)



5.14 concat()






mysql> select concat("My","S","QL");
+--------------------+
| concat("My","S","QL") |
+--------------------+
| MySQL |
+--------------------+
1 row in set (0.07 sec)



链接:https://www.cnblogs.com/ciel717/p/17449389.html


                                                              (版权归原作者所有,侵删)







浏览 27
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报