sql 截取字符串函数
时间: 2025-06-06 11:17:05 浏览: 15
### SQL 截取字符串函数及示例
在 SQL 中,用于截取字符串的函数主要有 `SUBSTR`、`SUBSTRING` 和其他相关函数。这些函数可以根据不同的需求灵活地截取字符串的一部分。
#### 1. 使用 `SUBSTR` 函数
`SUBSTR` 是一种常见的字符串截取函数,适用于多种数据库系统(如 MySQL、Oracle 等)。其基本语法如下:
```sql
SUBSTR(expression, start, length)
```
- `expression`:需要被截取的字符串。
- `start`:开始截取的位置,位置从 1 开始计数[^2]。
- `length`:需要截取的字符长度,如果省略,则从 `start` 开始截取到字符串末尾[^2]。
**示例**:
```sql
SELECT SUBSTR('字符串截取示例', 1, CHAR_LENGTH('字符串截取示例') - 3);
```
上述语句将从字符串 `'字符串截取示例'` 的第 1 个字符开始截取,直到倒数第 3 个字符结束[^1]。
#### 2. 使用 `SUBSTRING` 函数
`SUBSTRING` 是 SQL Server 中常用的字符串截取函数,功能与 `SUBSTR` 类似。其基本语法为:
```sql
SUBSTRING(expression, start, length)
```
- `expression`:需要被截取的字符串。
- `start`:开始截取的位置,位置从 1 开始计数[^3]。
- `length`:需要截取的字符长度。
**示例**:
```sql
DECLARE @str VARCHAR(50) = 'abcdeBeforefghjkAfter';
SELECT SUBSTRING(@str, 1, CHARINDEX('Before', @str) - 2); -- 截取 "Before" 前的字符串[^4]
SELECT SUBSTRING(@str, CHARINDEX('Before', @str) + 6, LEN(@str) + 6 - CHARINDEX('Before', @str)); -- 截取 "Before" 后的字符串[^4]
```
#### 3. 结合 `CHARINDEX` 和 `LEN` 函数
`CHARINDEX` 用于查找子字符串的位置,而 `LEN` 用于获取字符串的长度。通过结合这两个函数,可以实现更复杂的字符串截取逻辑。
**示例**:
```sql
DECLARE @str VARCHAR(50) = 'abcdeBeforefghjkAfter';
SELECT CASE
WHEN @str LIKE '%Before%' THEN SUBSTRING(@str, 1, CHARINDEX('Before', @str) - 2)
ELSE @str
END AS BeforePart; -- 截取 "Before" 前的部分[^4]
SELECT CASE
WHEN @str LIKE '%Before%' THEN SUBSTRING(@str, CHARINDEX('Before', @str) + 6, LEN(@str) + 6 - CHARINDEX('Before', @str))
ELSE NULL
END AS AfterPart; -- 截取 "Before" 后的部分
```
#### 4. 其他注意事项
- 在某些数据库中,`SUBSTR` 和 `SUBSTRING` 可能是同义词或具有相似功能,但具体行为可能略有不同,请根据所使用的数据库系统进行调整。
- 如果需要处理 Unicode 字符串,建议使用 `NCHAR` 或 `NVARCHAR` 数据类型,并确保函数支持 Unicode 编码[^3]。
### 总结
SQL 提供了多种字符串截取函数,如 `SUBSTR` 和 `SUBSTRING`,能够满足不同的字符串操作需求。通过合理组合这些函数,可以实现复杂的字符串处理逻辑。
阅读全文
相关推荐
















