MySQL字符串函数

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,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 个字符位置开始取,直到结束。

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 个字符位置(倒数)开始取,直到结束。

mysql> select substring('sqlstudy.com', -4);
+-------------------------------+
| substring('sqlstudy.com', -4) |
+-------------------------------+
| .com                          |
+-------------------------------+

3.4 从字符串的第 4 个字符位置(倒数)开始取,只取 2 个字符。

mysql> select substring('sqlstudy.com', -4, 2);
+----------------------------------+
| substring('sqlstudy.com', -4, 2) |
+----------------------------------+
| .c                               |
+----------------------------------+

我们注意到在函数 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 截取第二个 '.' (倒数)之后的所有字符。

mysql> select substring_index('www.sqlstudy.com.cn', '.', -2);
+-------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.', -2) |
+-------------------------------------------------+
| com.cn                                          |
+-------------------------------------------------+

4.3 如果在字符串中找不到 delim 参数指定的值,就返回整个字符串

mysql> select substring_index('www.sqlstudy.com.cn', '.coc', 1);
+---------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.coc', 1) |
+---------------------------------------------------+
| www.sqlstudy.com.cn                               |
+---------------------------------------------------+
<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; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值