MY SQL 常用字符串函数

在 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)

<think>好的,我现在需要回答用户关于MySQL字符串函数列表及用法的问题。用户之前提到了几个引用,涉及LENGTH、SUBSTRING、TRIM、SUBSTRING_INDEX等函数,我需要尽可能多地参考这些信息,并补充其他常见的字符串函数。 首先,我要整理用户提供的引用内容。引用[1]提到LENGTH函数,引用[2]和[4]涉及SUBSTRING和SUBSTRING_INDEX,引用[3]详细说明了TRIM的不同用法。这些是用户已经提供的例子,我需要确保这些函数在回答中被涵盖,并详细说明它们的用法。 接下来,我应该补充其他常用字符串函数。例如,CONCAT用于连接字符串,UPPER和LOWER转换大小写,REPLACE替换字符串中的子串,LEFT和RIGHT提取左右边的字符,LOCATE查找子串位置,REVERSE反转字符串,LPAD/RPAD填充字符串等。这些都是常见的字符串处理函数,用户可能会需要了解。 然后,我需要检查每个函数的语法是否正确,并给出示例。例如,CONCAT(str1, str2, ...),示例中展示如何连接多个字符串。对于REPLACE,要说明替换的规则,比如区分大小写。同时,注意每个函数的参数和返回值,例如SUBSTRING的起始位置可以是负数,这需要特别说明。 还要注意用户提到的格式要求:行内数学表达式用$...$,但这里可能用不上,所以重点在正确使用代码块和函数名称的高亮。确保每个函数单独列出,结构清晰,分点说明,可能用编号或者加粗标题。 另外,用户要求生成相关问题,我需要根据回答内容提出几个相关问题,比如如何组合使用函数,处理中文字符,性能优化等。这些问题需要与MySQL字符串函数相关,并且能引导用户进一步探索。 最后,确保回答的结构符合要求:先介绍常用函数及用法,然后给出示例代码块,再列出相关问题。同时,正确添加引用标识,比如引用[^1]、[^2]等,根据用户提供的引用来源,放在对应的函数说明末尾。 现在需要验证是否有遗漏的重要函数,比如CHAR_LENGTH和LENGTH的区别,处理NULL值的函数如COALESCE(用户引用[4]提到),以及字符串生成函数如REPEAT或SPACE。这些补充能让回答更全面。 总结步骤: 1. 列出用户提到的函数并详细说明。 2. 补充其他常见字符串函数。 3. 每个函数给出语法和示例。 4. 结构清晰,分点列出,使用代码块。 5. 生成相关问题。 6. 正确添加引用标注。</think>### MySQL 字符串函数列表及用法 #### 一、常用字符串函数及语法 1. **LENGTH** 返回字符串的字节长度(受字符集影响) 语法:`LENGTH(str)` 示例:`SELECT LENGTH('MySQL') AS len;` → 5 [^1] 2. **CHAR_LENGTH** 返回字符数量(与编码无关) 语法:`CHAR_LENGTH(str)` 示例:`SELECT CHAR_LENGTH('中国') AS char_len;` → 2 3. **CONCAT** 连接多个字符串(含NULL时返回NULL) 语法:`CONCAT(str1, str2, ...)` 示例:`SELECT CONCAT('Hello', ' ', 'World');` → 'Hello World' 4. **SUBSTRING** 截取子字符串(支持负索引) 语法:`SUBSTRING(str, start, length)` 示例:`SELECT SUBSTRING('Database', 3, 4) AS sub;` → 'tabl' [^2] 5. **TRIM** 删除首尾指定字符(默认空格) 语法: ```sql TRIM([LEADING|TRAILING|BOTH] [remstr] FROM str) ``` 示例: ```sql SELECT TRIM(' MySQL ') AS trimmed; -- 'MySQL' SELECT TRIM(TRAILING '\n' FROM column_name) FROM table; [^3] ``` 6. **REPLACE** 替换字符串中的子串(区分大小写) 语法:`REPLACE(str, from_str, to_str)` 示例:`SELECT REPLACE('foo bar', 'foo', 'new');` → 'new bar' 7. **UPPER/LOWER** 转换大小写 语法:`UPPER(str)`, `LOWER(str)` 示例:`SELECT UPPER('abc');` → 'ABC' 8. **LEFT/RIGHT** 截取左/右侧指定长度字符 语法:`LEFT(str, len)`, `RIGHT(str, len)` 示例:`SELECT LEFT('MySQL', 2);` → 'My' 9. **LOCATE** 查找子串位置(返回首次出现的位置,从1开始) 语法:`LOCATE(substr, str, [start])` 示例:`SELECT LOCATE('ql', 'MySQL');` → 3 10. **SUBSTRING_INDEX** 按分隔符截取子串(支持负计数) 语法:`SUBSTRING_INDEX(str, delim, count)` 示例: ```sql SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); → 'www.mysql' [^4] SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); → 'mysql.com' ``` 11. **LPAD/RPAD** 左侧/右侧填充字符至指定长度 语法:`LPAD(str, len, pad_str)` 示例:`SELECT LPAD('7', 3, '0');` → '007' 12. **REVERSE** 反转字符串 语法:`REVERSE(str)` 示例:`SELECT REVERSE('abc');` → 'cba' 13. **COALESCE** 返回第一个非NULL值(可用于处理空值) 语法:`COALESCE(val1, val2, ...)` 示例:`SELECT COALESCE(NULL, 'default');` → 'default' [^4] #### 二、典型应用示例 ```sql -- 组合使用函数:提取邮箱域名并大写 SELECT UPPER(SUBSTRING_INDEX(email, '@', -1)) AS domain FROM users; -- 处理含换行符的数据 SELECT TRIM(TRAILING '\r\n' FROM log_content) FROM system_logs; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值