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