我在其中由逗号separated.Like 数据库字符串“苹果,香蕉,菠萝,葡萄” 我需要逗号的基础上拆分此字符串,并通过this.Since迭代在sql server中没有内置函数,是否有任何有效的方法可以达到这个目标。拆分SQL Server中的字符串
12
A
回答
16
试试这个功能
CREATE FUNCTION [dbo].[func_Split]
(
@DelimitedString varchar(8000),
@Delimiter varchar(100)
)
RETURNS @tblArray TABLE
(
ElementID int IDENTITY(1,1), -- Array index
Element varchar(1000) -- Array element contents
)
AS
BEGIN
-- Local Variable Declarations
-- ---------------------------
DECLARE @Index smallint,
@Start smallint,
@DelSize smallint
SET @DelSize = LEN(@Delimiter)
-- Loop through source string and add elements to destination table array
-- ----------------------------------------------------------------------
WHILE LEN(@DelimitedString) > 0
BEGIN
SET @Index = CHARINDEX(@Delimiter, @DelimitedString)
IF @Index = 0
BEGIN
INSERT INTO
@tblArray
(Element)
VALUES
(LTRIM(RTRIM(@DelimitedString)))
BREAK
END
ELSE
BEGIN
INSERT INTO
@tblArray
(Element)
VALUES
(LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1))))
SET @Start = @Index + @DelSize
SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1)
END
END
RETURN
END
使用示例 - 简单的传递函数的逗号分隔的字符串,以及你所需要的分隔符。
DECLARE @SQLStr varchar(100)
SELECT @SQLStr = 'Mickey Mouse, Goofy, Donald Duck, Pluto, Minnie Mouse'
SELECT
*
FROM
dbo.func_split(@SQLStr, ',')
结果会是这样
+1
我会使用'SET @DelSize = LEN(@Delimiter +'x') - 1'来处理带有尾随空格的分隔符,例如''''和'',''。 –
4
您可以将数据转换为XML,通过自定义标签替换逗号,在这种情况下,为<w>
字。
create table t(col varchar(255));
insert into t values ('apple,banana,pineapple,grapes');
insert into t values ('car,bike,airplane');
select cast(('<w>' + replace(col, ',', '</w><w>') + '</w>') as xml) as xmlValue
from t
它返回
| XMLVALUE |
|--------------------------------------------------------|
| <w>apple</w><w>banana</w><w>pineapple</w><w>grapes</w> |
| <w>car</w><w>bike</w><w>airplane</w> |
现在,如果你使用此查询的内部XML选择,外部查询可以将它分成不同的行:
解决方案:
select split.xmlTable.value('.', 'varchar(255)') as xmlValue
from (
select cast(('<w>' + replace(col, ',', '</w><w>') + '</w>') as xml) as xmlValue
from t
) as xmlTable
cross apply xmlValue.nodes ('/w') as split(xmlTable);
9
...因为在SQL Server中的功能没有内置...
这在当时是真的,你问这个问题,但SQL Server 2016引入了STRING_SPLIT
。
所以,你可以只使用
SELECT value
FROM STRING_SPLIT ('apple,banana,pineapple,grapes', ',')
有一些限制(只接受单个字符分隔符和缺乏指示分离指标是最醒目的任何列)。性能测试的各种限制和有希望的结果在this blog post by Aaron Bertrand。
相关问题
- 1. SQL Server临时表拆分字符串
- 2. SQL SERVER 2008 R2字符串拆分
- 3. 根据sql server中的数字拆分字符串
- 4. 拆分字符串Teradata SQL
- 5. SQL拆分字符串
- 6. SQL Server 2008从记录字段中拆分字符串
- 7. 如何在基于字符串长度的SQL Server中拆分字符串
- 8. SQL中的多组拆分字符串
- 9. 将字符串拆分为SQL Server中的列
- 10. SQL Server中如何拆分多个列中的字符上的字符串
- 11. 如何在SQL Server 2008中拆分字符串
- 12. 如何在SQL Server 2012中拆分字符串?
- 13. Sql Server中拆分一个字符串使用表
- 14. 如何在SQL Server中的特定字符之后拆分字符串
- 15. 的SQL Server 2005:如何在一个字符串进行拆分
- 16. SQL Server 2005批量插入不存在的拆分字符串
- 17. 拆分SQL字符串成字
- 18. Elisp拆分字符串函数来拆分字符串。字符
- 19. SQL Server字符串操作 - 拆分搜索条件并构建新字符串
- 20. 在SQL Server 2008中将字符串拆分成固定长度的部分
- 21. 基于ORACLE 11g中字符位置的拆分字符串SQL
- 22. SQL Server中的拆分表
- 23. 将字符串拆分成行Oracle SQL
- 24. SQL更新 - 字符串拆分
- 25. T-SQL - 拆分字符串函数
- 26. SQL Server中的字符串
- 27. C#拆分字符串 - 将字符串拆分为数组
- 28. 拆分字符串与拆分方法
- 29. 拆分字符串没有拆分器
- 30. 拆分后的字符串
您使用哪种服务器端语言? – Yani
检查这个http://www.queryingsql.com/2013/09/querying-microsoft-sql-server-functions.html – Rohan