MySQL的字符串函数使用说明

本文深入解析了SQL中常用的字符串函数,包括ASCII、ORD、CONV、BIN、OCT、HEX、CHAR、CONCAT、LENGTH等,详细介绍了它们的功能、用法及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASCII(str)返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果strNULL,返回NULL

也可参见ORD()函数。

ORD(str)如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码。如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值。


CONV(N,from_base,to_base)在不同的数字基之间变换数字。

比如:CONV(15,10,2) 

结果:1111

BIN(N)返回数N的二进制形式,N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果NNULL,返回NULL

比如:BIN(15) 

结果:1111

OCT(N)返回数N的八进制形式,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,返回NULL

比如:OCT(15) 

结果:17

HEX(N)返回数N的十六进制,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果NNULL,返回NULL

比如:HEX(15) 

结果:F

CHAR(N,...)CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。NULL值被跳过。

比如:CHAR(97,98,99)

结果:abc

CONCAT(str1,str2,...)返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。

比如:CONCAT('myname','is','marcofly')
结果:mynameismarcofly

LENGTH(str) OCTET_LENGTH(str) CHAR_LENGTH(str) CHARACTER_LENGTH(str)返回字符串str的长度。

比如:LENGTH('测试')
结果:6

注意,对于多字节字符,其CHAR_LENGTH()仅计算一次。

LOCATE(substr,str) POSITION(substr IN str)返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.

比如:LOCATE('name','my name is whf')
结果:4
比如:POSITION('name' IN 'my name is whf')
结果:4

LOCATE(substr,str,pos)返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0

比如:LOCATE('name','my name is whf',2)

结果:4

这函数是多字节可靠的。

INSTR(str,substr)返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被颠倒。这函数是多字节可靠的。

LPAD(str,len,padstr)返回字符串str,左面用字符串padstr填补直到strlen个字符长。

比如:LPAD('测试',6,'1')

结果:1111测试

RPAD(str,len,padstr)返回字符串str,右面用字符串padstr填补直到strlen个字符长。    

比如:RPAD('测试',6,'1')
结果:测试1111


LEFT(str,len)返回字符串str的最左面len个字符。(SQL注入常用来猜测字段名)

比如:LEFT('MARCOFLY',5) 结果:MARCO

该函数是多字节可靠的。

RIGHT(str,len)返回字符串str的最右面len个字符

比如:RIGHT('MARCOFLY',3) 结果:FLY

该函数是多字节可靠的。

SUBSTRING(str,pos,len) SUBSTRING(str FROM pos FOR len) MID(str,pos,len)从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。

比如:SUBSTRING('MarcoFly',6,3)

结果:Fly

该函数是多字节可靠的。

SUBSTRING(str,pos) SUBSTRING(str FROM pos)从字符串str的起始位置pos返回一个子串。

比如:SUBSTRING('MarcoFly',6)

结果:Fly

原创文章:WEB开发_小飞

转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/01/13/mysql-string-funcion.html

<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、付费专栏及课程。

余额充值