mysql 常用的字符串函数:拼接 长度 大小写转换 截取 替换 去空格 位置 填充 翻转 重复 比较

发布时间:2025-05-13      访问量:20
在 MySQL 中,字符串函数用于处理和操作字符串数据。以下是一些常用的字符串函数及其功能:


**1. 字符串拼接**
- **`CONCAT(str1, str2, ...)`**
连接多个字符串。
```sql
SELECT CONCAT('Hello', ' ', 'World'); -- 输出: Hello World
```

- **`CONCAT_WS(separator, str1, str2, ...)`**
使用指定分隔符连接字符串(忽略 NULL 值)。
```sql
SELECT CONCAT_WS('-', '2023', '05', '15'); -- 输出: 2023-05-15
```


**2. 字符串长度**
- **`LENGTH(str)`**
返回字符串的字节长度(多字节字符如中文占多个字节)。
```sql
SELECT LENGTH('你好'); -- 输出: 6(UTF-8 中一个中文占 3 字节)
```

- **`CHAR_LENGTH(str)`**
返回字符串的字符长度。
```sql
SELECT CHAR_LENGTH('你好'); -- 输出: 2
```


**3. 大小写转换**
- **`UPPER(str)` / `UCASE(str)`**
将字符串转换为大写。
```sql
SELECT UPPER('hello'); -- 输出: HELLO
```

- **`LOWER(str)` / `LCASE(str)`**
将字符串转换为小写。
```sql
SELECT LOWER('WORLD'); -- 输出: world
```


**4. 字符串截取**
- **`SUBSTRING(str, start, length)`**
从 `start` 位置开始截取长度为 `length` 的子串(位置从 1 开始)。
```sql
SELECT SUBSTRING('HelloWorld', 6, 5); -- 输出: World
```

- **`LEFT(str, length)`** / **`RIGHT(str, length)`**
返回字符串最左边/最右边的 `length` 个字符。
```sql
SELECT LEFT('Hello', 3); -- 输出: Hel
```


**5. 字符串替换**
- **`REPLACE(str, old_str, new_str)`**
将字符串中的 `old_str` 替换为 `new_str`。
```sql
SELECT REPLACE('Hello World', 'World', 'MySQL'); -- 输出: Hello MySQL
```


**6. 去除空格**
- **`TRIM([BOTH | LEADING | TRAILING] trim_str FROM str)`**
去除字符串两侧/左侧/右侧的指定字符(默认是空格)。
```sql
SELECT TRIM(' Hello '); -- 输出: Hello
SELECT TRIM(LEADING 'x' FROM 'xHello'); -- 输出: Hello
```


**7. 字符串位置**
- **`LOCATE(substr, str)`** / **`POSITION(substr IN str)`**
返回子串 `substr` 在 `str` 中首次出现的位置(从 1 开始,未找到返回 0)。
```sql
SELECT LOCATE('ll', 'Hello'); -- 输出: 3
```


**8. 字符串填充**
- **`LPAD(str, len, pad_str)`** / **`RPAD(str, len, pad_str)`**
用 `pad_str` 左/右填充字符串至长度 `len`。
```sql
SELECT LPAD('123', 5, '0'); -- 输出: 00123
```


**9. 字符串反转**
- **`REVERSE(str)`**
反转字符串。
```sql
SELECT REVERSE('Hello'); -- 输出: olleH
```


**10. 重复字符串**
- **`REPEAT(str, count)`**
重复字符串 `count` 次。
```sql
SELECT REPEAT('abc', 2); -- 输出: abcabc
```


**11. 字符串比较**
- **`STRCMP(str1, str2)`**
比较两个字符串(相等返回 0,`str1 > str2` 返回 1,否则返回 -1)。
```sql
SELECT STRCMP('a', 'b'); -- 输出: -1
```


**12. 其他函数**
- **`ASCII(str)`**
返回字符串第一个字符的 ASCII 码。
```sql
SELECT ASCII('A'); -- 输出: 65
```

- **`FORMAT(num, decimal_places)`**
格式化数字为千分位分隔的字符串。
```sql
SELECT FORMAT(1234.567, 2); -- 输出: 1,234.57
```


**示例综合应用**
sql -- 组合使用多个函数:截取邮箱用户名并转为大写 SELECT UPPER(LEFT('user@example.com', LOCATE('@', 'user@example.com') - 1)); -- 输出: USER


**注意事项**
- **编码问题**:`LENGTH()` 和 `CHAR_LENGTH()` 的区别在处理多字节字符时尤为明显。
- **性能考虑**:函数操作可能导致索引失效,尽量避免在索引列上使用函数(如 `WHERE UPPER(name) = ' JOHN'`)。

根据具体需求选择合适的字符串函数,可以高效地处理和转换文本数据。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念