sql查询里 怎么拆分字符串(按“/”拆分)
发布网友
发布时间:2022-04-28 22:32
我来回答
共4个回答
懂视网
时间:2022-04-07 22:31
Create FUNCTION [dbo].[F_Split]
(
@SplitString nvarchar(max), --源字符串
@Separator nvarchar(10)=‘ ‘ --分隔符号,默认为空格
)
RETURNS @SplitStringsTable TABLE --输出的数据表
(
[id] int identity(1,1),
[value] nvarchar(max)
)
AS
BEGIN
DECLARE @CurrentIndex int;
DECLARE @NextIndex int;
DECLARE @ReturnText nvarchar(max);
SELECT @CurrentIndex=1;
WHILE(@CurrentIndex<=len(@SplitString))
BEGIN
SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
IF(@NextIndex=0 OR @NextIndex IS NULL)
SELECT @NextIndex=len(@SplitString)+1;
SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
SELECT @CurrentIndex=@NextIndex+1;
END
RETURN;
END
--使用示例
select * FROm dbo.F_Split(‘111,b2222,323232,32d,e,323232f,g3222‘, ‘,‘)
结果为
id value
-------- ---------------------------------------
1 111
2 b2222
3 323232
4 32d
5 e
6 323232f
7 g3222
=========================================================================
二、F_SplitLength:获取分割后的字符数组的长度
Create function [dbo].[F_SplitLength]
(
@String nvarchar(max), --要分割的字符串
@Split nvarchar(10) --分隔符号
)
returns int
as
begin
declare @location int
declare @start int
declare @length int
set @String=ltrim(rtrim(@String))
set @location=charindex(@split,@String)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@String,@start)
set @length=@length+1
end
return @length
end
--调用示例
select dbo.F_SplitLength(‘111,b2222,323232,32d,e,323232f,g3222‘,‘,‘)
结果为7。
=========================================================================
三、F_SplitOfIndex:获取分割后特定索引的字符串
Create function [dbo].[F_SplitOfIndex]
(
@String nvarchar(max), --要分割的字符串
@split nvarchar(10), --分隔符号
@index int --取第几个元素
)
returns nvarchar(1024)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @String=ltrim(rtrim(@String))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@String)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@String,@start)
set @next=@next+1
end
if @location =0 select @location =len(@String)+1
return substring(@String,@start,@location-@start)
end
--使用示例
select dbo.F_SplitOfIndex(‘111,b2222,323232,32d,e,323232f,g3222‘,‘,‘, 3)
SQL自定义函数split分隔字符串
标签:
热心网友
时间:2022-04-07 19:39
先建立一个自定义函数,之个函数非常有用,建议收入自已的数据库
CREATE FUNCTION mysplit--将以某分隔符分段的字串,按指定的顺序号提取子串:
(@str nvarchar(2000),--源字串
@sn int, --提取序号
@Deli varchar(1) --分隔符
)
RETURNS varchar(100)
AS
BEGIN
declare @first int,@last int,@result varchar(1000),@sn0 int
select @sn0=0,@first=0,@LAST=1,@str=@str+REPLICATE(@DELI,1)
while @sn0!=@sn
begin
select @sn0=@sn0+1,@first=@LAST,@last=charindex(@DELI,@str,@LAST)+1
end
if @last-@first-1<0
set @result=''
else
SET @RESULT=SUBSTRING(@str,@FIRST,@LAST-@FIRST-1)
RETURN ( @RESULT )
END
查询方法:
DECLARE @A VARCHAR(100),@B VARCHAR(100),@C VARCHAR(100)
SELECT
@A=DBO.MYSPLIT('A|B|C',1,'|') ,
@B=DBO.MYSPLIT('A|B|C',2,'|') ,
@C=DBO.MYSPLIT('A|B|C',3,'|')
SELECT @A,@B,@C
热心网友
时间:2022-04-07 20:57
自定义split函数
CREATE FUNCTION [dbo].[split]
(@str nvarchar(4000),@code varchar(10),@no int )
RETURNS varchar(200)
AS
BEGIN
declare @intLen int
declare @count int
declare @indexb int
declare @indexe int
set @intLen=len(@code)
set @count=0
set @indexb=1
if @no=0
if charindex(@code,@str,@indexb)<>0
return left(@str,charindex(@code,@str,@indexb)-1)
else
return @str
while charindex(@code,@str,@indexb)<>0
begin
set @count=@count+1
if @count=@no
break
set @indexb=@intLen+charindex(@code,@str,@indexb)
end
if @count=@no
begin
set @indexe=@intLen+charindex(@code,@str,@indexb)
if charindex(@code,@str,@indexe)<>0
return substring(@str,charindex(@code,@str,@indexb)+len(@code),charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code))
else
return right(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1)
end
return ''
END
热心网友
时间:2022-04-07 22:32
itjob上有视频看
sql查询里 怎么拆分字符串(按“/”拆分)
先建立一个自定义函数,之个函数非常有用,建议收入自已的数据库CREATE FUNCTION mysplit--将以某分隔符分段的字串,按指定的顺序号提取子串:(@str nvarchar(2000),--源字串 @sn int, --提取序号 @Deli varchar(1) --分隔符 ) RETURNS varchar(100)ASBEGINdeclare @first int,@la...
SQL拆分逗号分隔的字符串
1、首先点击新建查询按钮,新建一个查询。2、然后准备一个要分割的字符串,如下图所示。3、接着用parsename进行分割,第二个参数是取分割后的第几个,如下图所示,第一个是最后一个位置。4、然后最后一个才是第一个的位置。5、接下来就可以通过位置把他们都取出来了。6、最后就得到了字符串各个分...
SQL拆分逗号分隔的字符串
要处理逗号分隔的字符串,SQL提供了一个简单的方法。首先,打开SQL环境,点击新建查询功能,初始化一个查询操作。在处理的阶段,你需要有一个待分割的字符串,例如:"apple,banana,orange"。在这个字符串中,逗号起到了分隔各个元素的作用。接下来,利用SQL的`PARSENAME`函数进行分割。这个函数的第二个参...
SQL 如何把字符串拆分按固定值插入到表里?
--方法一(用xml来拆分字符串)Select id,type,name,app From (Select id,type, CAST( '<v>'+REPLACE(name,',','</v><v>')+'</v>' as xml) As xml,app From (select 1 As id,'A' As type,'张三,李四,王五' As name,0 As APP) S ) a outer apply ( Select x.y....
再sql中如何把一个字符串按字符分解比如@m=‘abc’分解以后变成‘a...
Sql第一种方式:SELECT PARSENAME(REPLACE('Hello John Smith', ' ', '.'), 2)第二种方式:CREATEFUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))returns @temptable TABLE (items varchar(8000))asbegin declare @idx int declare @slice varchar(8000) select @idx ...
oracle sql 实现查询时把一字符串按逗号分割,返回分割后的份数?_百...
上代码上图 select length('张三,李四,王五,赵六')-length(replace('张三,李四,王五,赵六',','))+1 from dual;
oracle sql 字符串拆分的查询的问题,急!!!
1 row inserted SQL> insert into a(t_name, t_desc) values ('lisi','b,c');1 row inserted SQL> insert into a(t_name, t_desc) values ('wangwu','c');1 row inserted SQL> insert into a(t_name, t_desc) values ('zhangliu','dd');1 row inserted SQL> select * from...
sql 如何将一个字段拆分成单个字符(如图:)
可以用substring函数来处理:select substring(StyleID,1,1) as StyleID_1,substring(StyleID,2,1) as StyleID_2,substring(StyleID,3,1) as StyleID_3,substring(StyleID,4,1) as StyleID_4,substring(StyleID,5,1) as StyleID_5 from 表 ...
在SQL中怎么把一列字符串拆分为多列,请高手赐教
--首先,你是按什么规则拆? 我举个例子 你要按字段中的逗号拆开,假设字段名叫text--用charindex和substring这2个函数 select substring(text,1,charindex(',',text)-1) as [before], substring(text,charindex(',',text),len(text)) as [after] from table ...
SQL server根据逗号拆分字符串
本次任务要求根据逗号将submit_param结果集拆分为多行。原始结果集如下:由于我使用的SQL Server版本是2008,无法使用sql_split等函数,欢迎各位提供更好的解决方案,共同进步。关于拆分字符串,前三种方法实质上都是利用spt_values,但数据超过一定范围就无法处理,就像我这次的例子一样。当数据超出范围后,...