拆分字符串

bitfubin 2003-07-14 04:10:17
表中有一字段aaa 内容以逗号分隔
如 ‘aaaa,sadfas,asdfgasdf,asdfasd,asdf,asfasdf'
其中不知道有多少逗号
要返回记录集
aaaa
sadfas
asdfgasdf
asdfasd
asdf
asfasdf'
谢谢了 我只有20分了



...全文
66 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fubinbit 2003-07-15
  • 打赏
  • 举报
回复
直接select出来
declare @string varchar(1000)
set @string='aaaa,bbbb,cccc,dddd'
set @string='select '''+replace(@string,',','''as str union all select ''')+''''
exec(@string)
txlicenhe 2003-07-14
  • 打赏
  • 举报
回复
还是大力高,总能找到最好的
bitfubin 2003-07-14
  • 打赏
  • 举报
回复
我要返回的是一个记录集
goodhal 2003-07-14
  • 打赏
  • 举报
回复
DECLARE @sStr varchar(100)
SET @sStr = 'aaaa,sadfas,asdfgasdf,asdfasd,asdf,asfasdf'
DECLARE @iPosBegin int
DECLARE @iPosEnd int
DECLARE @sTemp varchar(100)

CREATE TABLE #MyResult1
(ResultStr varchar(100))

DECLARE @sResult varchar(100)

SET @iPosBegin = 0
SET @iPosBegin = PATINDEX('%,%',@sStr)
IF @iPosBegin = 0
BEGIN
PRINT 'NULL'
RETURN
END
ELSE
BEGIN
PRINT @iPosBegin

SET @sResult = SUBSTRING(@sStr,1,@iPosBegin - 1)
INSERT INTO #MyResult1
VALUES (@sResult)

SET @sStr = SUBSTRING(@sStr,@iPosBegin + 1,LEN(@sStr) - @iPosBegin )
SET @iPosBegin = PATINDEX('%,%',@sStr)
WHILE @iPosBegin > 0
BEGIN
SET @sResult = SUBSTRING(@sStr,1,@iPosBegin - 1)
INSERT INTO #MyResult1
VALUES (@sResult)

SET @sStr = SUBSTRING(@sStr,@iPosBegin + 1,LEN(@sStr) - @iPosBegin )
SET @iPosBegin = PATINDEX('%,%',@sStr)
END

INSERT INTO #MyResult1
VALUES (@sStr)

SELECT * FROM #MyResult1
END
pengdali 2003-07-14
  • 打赏
  • 举报
回复
直接select出来
declare @string varchar(1000)
set @string='aaaa,bbbb,cccc,dddd'
set @string='select '''+replace(@string,',','''as str union all select ''')+''''
exec(@string)
cdshelf 2003-07-14
  • 打赏
  • 举报
回复
--==============================================================================
--==这个UDF模拟 Split() 函数功能,SQL Server 中并没有数组数据类型,这个函数返回“表”数据类型
--==将被分隔符分隔的字符串分开,返回分隔符之间的单元
--==============================================================================
CREATE FUNCTION dbo.UDF_PublicSplit (@DelimitedString nvarchar(4000), @Delimiter nvarchar(100))

RETURNS @Array TABLE ([ID] int IDENTITY(1,1), Element nvarchar(1000))

AS

--ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

BEGIN
--------------------------------------------------------
--本地变量
--------------------------------------------------------
DECLARE @Index INT
DECLARE @Start INT
DECLARE @DelimiterSize INT

--------------------------------------------------------
--分隔符的长度
--------------------------------------------------------
SET @DelimiterSize = LEN(@Delimiter)

--------------------------------------------------------
--遍历被分隔字符串,将每个分隔单元添加到表
--------------------------------------------------------
WHILE LEN(@DelimitedString) > 0
BEGIN
SET @Index = CHARINDEX(@Delimiter, @DelimitedString)

--------------------------------------------------------
--如果只有一个单独的分隔单元,即并没有分隔标志出现在被分割字符串
--------------------------------------------------------
IF @Index = 0
BEGIN
INSERT INTO @Array VALUES(@DelimitedString)
BREAK
END

--------------------------------------------------------
--如果有多个分隔单元
--------------------------------------------------------
ELSE
BEGIN
INSERT INTO @Array VALUES(SUBSTRING(@DelimitedString, 1,@Index - 1))
SET @Start = @Index + @DelimiterSize
SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1)
END
END

RETURN
END

--ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
txlicenhe 2003-07-14
  • 打赏
  • 举报
回复
类似如下,具体自己实现
declare @aa varchar(100)
set @aa = 'aaaa,sadfas,asdfgasdf,asdfasd,asdf,asfasdf'
while charindex(',',@aa) > 0
begin
Select left(@aa,charindex(',',@aa)-1)
Set @aa = right(@aa,len(@aa) - charindex(',',@aa))
end
Select @aa



jiutiao 2003-07-14
  • 打赏
  • 举报
回复
gz

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧