SQL server如何多行 将逗号分隔的字符串进行分拆截取
时间: 2023-05-26 14:07:14 浏览: 63
有多种方法可以将逗号分隔的字符串进行分拆截取。以下是其中两种方法:
方法一:使用字符串分割函数
SQL Server 2016 及更高版本支持 STRING_SPLIT() 函数,可以将字符串分割成单个值,并返回一行结果集。例如:
```
SELECT value
FROM STRING_SPLIT('A,B,C,D', ',')
```
结果:
```
value
-----
A
B
C
D
```
方法二:使用XML表达式和节点方法
将逗号分隔的字符串包含在 `<root><item>...</item></root>` 的 XML 表达式中,然后使用节点方法进行分割。例如:
```
DECLARE @str NVARCHAR(MAX) = 'A,B,C,D'
SELECT n.value('.', 'varchar(10)') as value
FROM (SELECT CAST('<root><item>' + REPLACE(@str, ',', '</item><item>') + '</item></root>' as xml) as x) as t
CROSS APPLY x.nodes('/root/item') as q(n)
```
结果:
```
value
-----
A
B
C
D
```
相关问题
SQL server如何将逗号分隔的字符串进行分拆截取
在 SQL Server 中将逗号分隔的字符串进行分拆截取,可以使用以下方法:
1. 使用内置函数 STRING_SPLIT()
该函数在 SQL Server 2016 及以上版本中提供,可以将一个字符串按照指定分隔符分隔成多个子字符串,并返回一个表(Table)。
例如,假设有一个逗号分隔的字符串:'apple,banana,orange',可以使用以下代码将其分隔成多个子字符串:
```sql
SELECT * FROM STRING_SPLIT('apple,banana,orange', ',')
```
输出结果:
```
value
-----
apple
banana
orange
```
可以将该结果插入到临时表中,然后进行进一步处理。
2. 使用自定义函数
如果使用的 SQL Server 版本不支持内置函数 STRING_SPLIT(),则可以编写自定义函数进行字符串分隔截取。例如,下面是一个使用 SQL Server 中的 XML 数据类型和内置函数的自定义函数:
```sql
CREATE FUNCTION [dbo].[SplitString](@str NVARCHAR(MAX), @delimiter NVARCHAR(1))
RETURNS @result TABLE (
id INT IDENTITY(1, 1) PRIMARY KEY,
value NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<root><s>' + REPLACE(@str, @delimiter, '</s><s>') + '</s></root>'
INSERT INTO @result(value)
SELECT s.value
FROM @xml.nodes('/root/s') AS x(s)
RETURN
END
```
使用以上代码创建自定义函数 SplitString() 后,就可以像使用内置函数一样调用:
```sql
SELECT * FROM dbo.SplitString('apple,banana,orange', ',')
```
输出结果同样为:
```
id value
-- -----
1 apple
2 banana
3 orange
```
以上两种方法都可以对逗号分隔的字符串进行分隔截取,根据实际情况选择适用的方法。
SQL server如何列表里将逗号分隔的字符串进行分拆成多行
在SQL Server中,可以使用以下方法将逗号分隔的字符串拆分成多行:
方法1:使用XML
```
DECLARE @str VARCHAR(100) = 'apple,orange,banana,mango'
SELECT
Split.a.value('.', 'VARCHAR(100)') AS Fruit
FROM
(SELECT
CAST ('<M>' + REPLACE(@str, ',', '</M><M>') + '</M>' AS XML) AS Data
) AS A
CROSS APPLY Data.nodes ('/M') AS Split(a)
```
方法2:使用字符串函数
```
DECLARE @str VARCHAR(100) = 'apple,orange,banana,mango'
;WITH temp AS
(
SELECT CAST('<M>' + REPLACE(@str, ',', '</M><M>') + '</M>' AS XML) AS FruitList
)
SELECT
Fruit.value('.', 'VARCHAR(100)') AS Fruit
FROM
temp CROSS APPLY
FruitList.nodes('/M') AS Fruit(Fruit)
```
这两种方法都将逗号分隔的字符串转换为XML格式,并使用XML的属性来拆分每个值。然后使用CROSS APPLY或节点函数将拆分后的值转换为多行结果。