MySQL 提供了许多用于操作字符串的函数。以下是一些常用函数的列表:
| 函数名 | 描述 |
|---|---|
CONCAT() |
返回连接后的字符串 |
CONCAT_WS() |
使用分隔符返回连接后的字符串 |
FORMAT() |
返回格式化为指定小数位数的数字 |
HEX() |
返回十六进制表示 |
INSERT() |
在指定位置插入子字符串 |
INSTR() |
返回子字符串第一次出现的位置 |
LCASE() |
转换为小写 |
LEFT() |
返回最左边的指定数量字符 |
LENGTH() |
返回字符串长度(以字节为单位) |
LIKE |
简单的模式匹配 |
LOAD_FILE() |
加载指定文件 |
LOCATE() |
返回子字符串第一次出现的位置 |
LOWER() |
转换为小写 |
LPAD() |
返回左填充了指定字符串的字符串 |
LTRIM() |
删除前导空格 |
MAKE_SET() |
返回一组逗号分隔的字符串 |
MATCH() |
执行全文搜索 |
MID() |
返回子字符串 |
NOT LIKE |
简单的模式匹配否定形式 |
NOT REGEXP |
正则表达式模式匹配的否定形式 |
OCT() |
返回八进制表示 |
ORD() |
返回字符的字符代码 |
POSITION() |
返回子字符串第一次出现的位置 |
QUOTE() |
为 SQL 语句转义参数 |
REGEXP |
使用正则表达式进行模式匹配 |
REPEAT() |
重复指定次数 |
REPLACE() |
替换所有出现的指定字符串 |
REVERSE() |
反转字符串中的字符 |
RIGHT() |
返回最右边的指定数量字符 |
RLIKE |
REGEXP 的同义词 |
RPAD() |
返回右填充了指定字符串的字符串 |
RTRIM() |
删除尾随空格 |
SOUNDEX() |
返回 soundex 字符串 |
SOUNDS LIKE |
比较发音 |
SPACE() |
返回指定数量空格的字符串 |
STRCMP() |
比较两个字符串 |
SUBSTR() |
返回指定的子字符串 |
SUBSTRING() |
返回指定的子字符串 |
SUBSTRING_INDEX() |
从字符串中返回分隔符出现指定次数前的子字符串 |
TO_BASE64() |
将参数转换为 base-64 字符串 |
TRIM() |
删除前导和尾随空格 |
UCASE() |
UPPER 的同义词 |
UNHEX() |
返回包含数字的十六进制表示的字符串 |
UPPER() |
转换为大写 |
WEIGHT_STRING() |
返回字符串的权重字符串 |
第 20.1 节:LENGTH()
返回字符串的字节长度。由于某些字符可能使用多个字节编码,如果需要获取字符长度,请使用 CHAR_LENGTH()。
语法:LENGTH(str)
SELECT LENGTH('foobar'); -- 6
SELECT LENGTH('foobar'); -- 8(注意:此处原文示例可能表示包含非 ASCII 字符,实际输出取决于字符集)
-- 与 CHAR_LENGTH(...) = 6 对比
第 20.2 节:CHAR_LENGTH()
返回字符串中的字符数。
语法:CHAR_LENGTH(str)
SELECT CHAR_LENGTH('foobar'); -- 6
SELECT CHAR_LENGTH('foobar'); -- 6(与 LENGTH(...) = 8 对比)
第 20.3 节:HEX(str)
将参数转换为十六进制。用于字符串。
SELECT HEX('foobar'); -- 在 latin1 字符集下: '666F6F626172'
-- 在 utf8/utf8mb4 字符集下: '666FC3B6C3B6626172'
第 20.4 节:SUBSTRING()
SUBSTRING(或等同的 SUBSTR)返回从指定位置开始,可选指定长度的子字符串。
语法:SUBSTRING(str, start_position)
SELECT SUBSTRING('foobar baz', 4); -- 'bar baz'
SELECT SUBSTRING('foobarbar' FROM 4); -- 'barbar'
-- 使用负索引(从末尾计数)
SELECT SUBSTRING('foobarbar', -6); -- 'barbar'
SELECT SUBSTRING('foobarbar' FROM -6); -- 'barbar'
语法:SUBSTRING(str, start_position, length)
SELECT SUBSTRING('foobarbar', 4, 3); -- 'bar'
SELECT SUBSTRING('foobarbar' FROM 4 FOR 3); -- 'bar'
-- 使用负索引
SELECT SUBSTRING('foobarbar', -6, 3); -- 'bar'
SELECT SUBSTRING('foobarbar' FROM -6 FOR 3); -- 'bar'
第 20.5 节:UPPER() / UCASE()
将字符串参数转换为大写。
语法:UPPER(str)
SELECT UPPER('fooBar'); -- 'FOOBAR'
SELECT UCASE('fooBar'); -- 'FOOBAR'
第 20.6 节:STR_TO_DATE - 将字符串转换为日期
假设有一个字符串类型的列 my_date_field,其值为字符串 07/25/2016,以下语句演示了 STR_TO_DATE 函数的使用:
SELECT STR_TO_DATE(my_date_field, '%m/%d/%Y') FROM my_table;
你也可以在 WHERE 子句中使用此函数。
第 20.7 节:LOWER() / LCASE()
将字符串参数转换为小写。
语法:LOWER(str)
SELECT LOWER('fooBar'); -- 'foobar'
SELECT LCASE('fooBar'); -- 'foobar'
第 20.8 节:REPLACE()
将字符串中所有出现的 from_str 替换为 to_str。
语法:REPLACE(str, from_str, to_str)
SELECT REPLACE('foobarbar', 'bar', 'BAR'); -- 'fooBARbar'
SELECT REPLACE('foobarbar', 'zzz', 'ZZZ'); -- 'foobarbar'
第 20.9 节:在逗号分隔列表中查找元素
SELECT FIND_IN_SET('b', 'a,b,c'); -- 2
SELECT FIND_IN_SET('d', 'a,b,c'); -- 0