MySql的字符串函数




MySql的字符串函数

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

mysql> select ASCII('2');
-> 50
mysql> select ASCII(2);
-> 50
mysql> select ASCII('dx');
-> 100

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

mysql> select ORD('2');
-> 50


CONV(N,from_base,to_base)
在不同的数字基之间变换数字。返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参数是NULL,返回NULL。参数N解释为一个整数,但是可以指定为一个整数或一个字符串。最小基是2且最大的基是36。如果to_base是一个负数,N被认为是一个有符号数,否则,N被当作无符号数。 CONV以64位点精度工作。

mysql> select CONV("a",16,2);
-> '1010'
mysql> select CONV("6E",18,8);
-> '172'
mysql> select CONV(-17,10,-18);
-> '-H'
mysql> select CONV(10+"10"+'10'+0xa,10,10);
-> '40'


BIN(N)
返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是NULL,返回NULL。

mysql> select BIN(12);
-> '1100'

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

mysql> select OCT(12);
-> '14'


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

mysql> select HEX(255);
-> 'FF'


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

mysql> select CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> select CHAR(77,77.3,'77.3');
-> 'MMM'


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

mysql> select CONCAT('My', 'S', 'QL');
-> 'MySQL'
mysql> select CONCAT('My', NULL, 'QL');
-> NULL
mysql> select CONCAT(14.3);
-> '14.3'

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

mysql> select LENGTH('text');
-> 4
mysql> select OCTET_LENGTH('text');
-> 4

注意,对于多字节字符,其CHAR_LENGTH()仅计算一次。
LOCATE(substr,str)
 
POSITION(substr IN str)
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.

mysql> select LOCATE('bar', 'foobarbar');
-> 4
mysql> select LOCATE('xbar', 'foobar');
-> 0

该函数是多字节可靠的。

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

mysql> select LOCATE('bar', 'foobarbar',5);
-> 7

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

mysql> select INSTR('foobarbar', 'bar');
-> 4
mysql> select INSTR('xbar', 'foobar');
-> 0

这函数是多字节可靠的。
LPAD(str,len,padstr)
返回字符串str,左面用字符串padstr填补直到str是len个字符长。

mysql> select LPAD('hi',4,'??');
-> '??hi'


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

mysql> select RPAD('hi',5,'?');
-> 'hi???'

LEFT(str,len)
返回字符串str的最左面len个字符。

mysql> select LEFT('foobarbar', 5);
-> 'fooba'

该函数是多字节可靠的。
RIGHT(str,len)
返回字符串str的最右面len个字符。

mysql> select RIGHT('foobarbar', 4);
-> 'rbar'

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

mysql> select SUBSTRING('Quadratically',5,6);
-> 'ratica'

该函数是多字节可靠的。
SUBSTRING(str,pos)
 
SUBSTRING(str FROM pos)
从字符串str的起始位置pos返回一个子串。

mysql> select SUBSTRING('Quadratically',5);
-> 'ratically'
mysql> select SUBSTRING('foobarbar' FROM 4);
-> 'barbar'


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

余额充值