sqlserver 字符串函数
时间: 2025-05-26 14:43:04 浏览: 16
### SQL Server 字符串处理函数列表
以下是 SQL Server 中常用的字符串操作相关函数及其功能描述:
#### 基本字符串操作函数
1. **`LEN(string)`**: 返回指定字符串中的字符数,不包括尾随空格[^2]。
```sql
SELECT LEN('Hello World'); -- 结果为 11
```
2. **`DATALENGTH(expression)`**: 返回表达式的字节数。对于 `nvarchar` 类型的数据,返回的是实际占用的字节长度(每个字符可能占 2 个字节)[^3]。
```sql
SELECT DATALENGTH(N'你好'); -- 结果为 4
```
3. **`CHARINDEX(substring, string [, start_location])`**: 查找子字符串首次出现的位置,并返回其起始位置。如果找不到,则返回 0[^1]。
```sql
SELECT CHARINDEX('World', 'Hello World'); -- 结果为 7
```
4. **`PATINDEX('%pattern%', expression)`**: 使用通配符模式匹配来查找指定模式第一次出现的位置[^4]。
```sql
SELECT PATINDEX('%orl%', 'Hello World'); -- 结果为 5
```
5. **`REPLACE(original_string, search_string, replace_with)`**: 将原始字符串中的某些部分替换为目标字符串[^1]。
```sql
SELECT REPLACE('Hello World', 'World', 'Universe'); -- 结果为 'Hello Universe'
```
6. **`SUBSTRING(expression, start, length)`**: 提取从指定位置开始并具有指定长度的部分字符串[^2]。
```sql
SELECT SUBSTRING('Hello World', 7, 5); -- 结果为 'World'
```
7. **`LEFT(string, number_of_characters)` 和 `RIGHT(string, number_of_characters)`**: 分别提取字符串左侧或右侧的指定数量字符[^3]。
```sql
SELECT LEFT('Hello World', 5); -- 结果为 'Hello'
SELECT RIGHT('Hello World', 5); -- 结果为 'World'
```
8. **`LTRIM(string)` 和 `RTRIM(string)`**: 删除字符串开头或结尾处的空白字符。
```sql
SELECT LTRIM(' Hello'), RTRIM('World '); -- 结果分别为 'Hello' 和 'World'
```
9. **`LOWER(string)` 和 `UPPER(string)`**: 将字符串转换为小写或大写形式[^1]。
```sql
SELECT LOWER('HELLO WORLD'), UPPER('hello world'); -- 结果分别为 'hello world' 和 'HELLO WORLD'
```
10. **`STUFF(string, start_position, delete_length, insert_string)`**: 替换掉原字符串的一部分,并插入新的字符串[^2]。
```sql
SELECT STUFF('Hello World', 7, 5, 'SQL'); -- 结果为 'Hello SQL'
```
#### 高级字符串拆分与拼接函数
1. **`STRING_SPLIT(string, separator)`**: (适用于 SQL Server 2016 及更高版本)将输入字符串按指定分隔符拆分为表格数据集。
```sql
SELECT value FROM STRING_SPLIT('apple,banana,cherry', ',');
```
2. **自定义拆分函数**:
- 用户可以创建自己的表值函数来进行更复杂的字符串拆分逻辑。例如,在引用中提到的一个实现方式如下[^1]:
```sql
CREATE FUNCTION [dbo].[F_StrToCharTable] (@str VARCHAR(max))
RETURNS @tableName TABLE (Name NVARCHAR(50)) AS
BEGIN
SET @str = REPLACE(REPLACE(@str , ',' , ',') , ',' , ',')
SET @str = @str + ','
DECLARE @insertStr VARCHAR(max), @newstr VARCHAR(max)
SET @insertStr = LEFT(@str, CHARINDEX(',', @str) - 1)
SET @newstr = STUFF(@str, 1, CHARINDEX(',', @str), '')
INSERT @tableName VALUES(CAST(@insertStr AS NVARCHAR))
WHILE (LEN(@newstr) > 0)
BEGIN
SET @insertStr = LEFT(@newstr, CHARINDEX(',', @newstr) - 1)
INSERT @tableName VALUES(CAST(@insertStr AS NVARCHAR))
SET @newstr = STUFF(@newstr, 1, CHARINDEX(',', @newstr), '')
END
RETURN
END;
```
3. **`CONCAT([expression,...n])`**: 连接多个字符串而不忽略任何参数中的 `NULL` 值[^2]。
```sql
SELECT CONCAT('Hello', NULL, 'World'); -- 结果为 'HelloWorld'
```
4. **`FORMAT(value, format[, culture])`**: 根据指定格式化模板将数值或其他类型转换为字符串表示形式[^3]。
```sql
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss'); -- 当前日期时间格式化
```
---
阅读全文
相关推荐













