sql分割字符串,sql分割
create function [dbo].[fn_Split]
(
@SourceSql nvarchar(max),--源分隔字符串
@StrSeprate varchar(10)--分隔符
)
returns @temp table(a nvarchar(max))
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'\'
insert @temp values(@SourceSql)
return
end
go
看你是什么数据库。
在Sql Server里面,不支持类似正则的方式拆分,只能使用字符串函数。
LEFT(name,CHARINDEX('.',name,0)) 这样的方式获取
中间部分可以用SUBSTRING代替LEFT实现
OK!测试通过了。试试吧。觉得好就多加点分
exec decord_a '1a@b2@c3@e4@f5'
---这个存储过程可以提取包含任意个@字符的字符串,通过临时表输出,使用查询分析器或前台数据集都可以得到结果。
create procedure decord_A
@STR VARCHAR(100)
AS
declare @n int,@SN INT
SET @N=LEN(@STR)-LEN(REPLACE(@STR,'@',''))--提取字符@的个数
SET @SN=1
CREATE table #TEMP(SN INT,CSTR VARCHAR(100))
WHILE @SN<=@N
BEGIN
INSERT INTO #TEMP SELECT @SN,LEFT(@STR,CHARINDEX('@',@STR)-1)
SELECT @SN=@SN+1,@STR=SUBSTRING(@STR,CHARINDEX('@',@STR)+1,100)
END
INSERT INTO #TEMP SELECT @N+1,@STR
SELECT *FROM #TEMP order by sn
GO