怎么分离这个字符串 aa|bb|cc|dd|

jb2008 2003-09-08 10:00:38
在SQL中怎么分离这样一个字符串
怎么分离这个字符串 aa|bb|cc|dd|
在线等.
...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-09-08
  • 打赏
  • 举报
回复
/*
字符串分拆函数

--调用示例
select * from dbo.fsplit('a;adf;fd;ed;dh',';')
select * from dbo.fsplit('a,,adf,,fd,,ed,,dh',',,')
邹建 2003.07*/

--检查函数是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fsplit]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fsplit]
GO

--创建字符串分拆的函数
create function fsplit(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @re table(istr varchar(8000))
as
begin
declare @i int,@splen int
select @splen=len(@spli)
,@i=charindex(@spli,@str)
while @i>0
begin
insert into @re values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
,@i=charindex(@spli,@str)
end
if @str<>'' insert into @re values(@str)
return
end


--调用:
select * from dbo.fsplit('aa|bb|cc|dd|','|')
CrazyFor 2003-09-08
  • 打赏
  • 举报
回复
--N要连继,
select top 8000 identity(int,1,1) as N into numtab from
(select top 100 id=1 from sysobjects) as a,
(select top 100 id=1 from sysobjects) as b,
(select top 100 id=1 from sysobjects) as c

---------------------------------------------------------------------
declare @a table (id int,string varchar(8000))
insert @a select 1 ,'a,b,c,sd,dfsdfg'
union select 2, 'a,n,sdf,we,t'
union select 3, 's,df,df'



select a.*,b.*,id,substring(','+string+',',N+1,charindex(',',','+string+',',N+1)-(N+1))
from @a a,numtab b
where substring(','+string+',',N,8000) like ',_%'
order by id,N
yujohny 2003-09-08
  • 打赏
  • 举报
回复
DECLARE @str NVARCHAR(200),@SubStr NVARCHAR(50)
SET @str='aa|bb|cc|dd'
WHILE CHARINDEX('|',@str,0)>0
BEGIN
SET @SubStr = LEFT(@str,CHARINDEX('|',@str,0)-1)
SELECT @SubStr
SET @str = RIGHT(@str,Len(@str)-CHARINDEX('|',@str,0))
END
txlicenhe 2003-09-08
  • 打赏
  • 举报
回复
declare @a varchar(20),@b varchar(200)
set @a = 'aa|bb|cc|dd'
set @b = 'select ''' + replace(@a,'|',''' union all select ''') + ''''
print @b
exec (@b)
结果
aa
bb
cc
dd
hjb111 2003-09-08
  • 打赏
  • 举报
回复
SUBSTRING
返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。

语法
SUBSTRING ( expression , start , length )

参数
expression

是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。

start

是一个整数,指定子串的开始位置。

length

是一个整数,指定子串的长度(要返回的字符数或字节数)。



说明 由于在 text 数据上使用 SUBSTRING 时 start 和 length 指定字节数,因此 DBCS 数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与 READTEXT 处理 DBCS 的方式一致。然而,由于偶而会出现奇怪的结果,建议对 DBCS 字符使用 ntext 而非 text。


返回类型
如果 expression 是支持的字符数据类型,则返回字符数据。如果 expression 是支持的 binary 数据类型,则返回二进制数据。

返回字符串的类型与给定表达式的类型相同(表中显示的除外)。

给定的表达式 返回类型
text varchar
image varbinary
ntext nvarchar


注释
在字符数中必须指定使用 ntext、char 或 varchar 数据类型的偏移量(start 和 length)。在字节数中必须指定使用 text、image、binary 或 varbinary 数据类型的偏移量。



说明 兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。


示例
A. 在字符串上使用 SUBSTRING
下例显示如何只返回字符串的一部分。该查询在一列中返回 authors 表中的姓氏,在另一列中返回 authors 表中的名字首字母。

USE pubs
SELECT au_lname, SUBSTRING(au_fname, 1, 1)
FROM authors
ORDER BY au_lname

happydreamer 2003-09-08
  • 打赏
  • 举报
回复
declare @string varchar(1000)
declare @xh char(10)
declare @sh varchar(13)
set @string='aa|bb|cc|dd|'
set @string='select * into ##tmp from (select '''+replace(@string,'|','''as str union all select ''')+''') a'
exec(@string)


select * from ##tmp
pengdali 2003-09-08
  • 打赏
  • 举报
回复
declare @string varchar(1000)
set @string='aa|bb|cc|dd|'

set @string=left(@string,len(@string)-1)
set @string='select * from (select '''+replace(@string,'|','''as str union all select ''')+''') a'
exec(@string)
jb2008 2003-09-08
  • 打赏
  • 举报
回复
以|分离

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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