MSSQL Split表字段

本文介绍了一个SQL函数用于拆分字符串,并演示了如何在实际数据操作中应用该函数,包括创建临时表、游标操作及数据筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

--拆分字符串之后匹配结果集合
CREATE FUNCTION [dbo].[fnSplit](
    @sInputList VARCHAR(8000) -- List of delimited items
  , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))

BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
 BEGIN
 SELECT
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
 
 IF LEN(@sItem) > 0
  INSERT INTO @List SELECT @sItem
 END

IF LEN(@sInputList) > 0
 INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END

----------------------使用方法
if   object_id('tempdb..#Tmp') is not null  
        drop table #Tmp
create table #Tmp --创建临时表#Tmp
(
    ID   VARCHAR(100) 
);

DECLARE @iid VARCHAR(100)
declare @name varchar(500)
declare cursor1 cursor for         --定义游标cursor1
select iid,props from Iteminfos               --使用游标的对象
open cursor1                       --打开游标

fetch next from cursor1 into @iid,@name  --将游标向下移1行,获取的数据放入之前定义的变量@iid,@name中

while @@fetch_status=0           --判断是否成功获取数据
begin
IF((select COUNT(*) FROM fnSplit(@name, ';') WHERE  item = '20000:20090')>0)
INSERT INTO #Tmp (ID) VALUES (@iid)
fetch next from cursor1 into @iid,@name  --将游标向下移1行
end

close cursor1                   --关闭游标
deallocate cursor1

SELECT * FROM dbo.Iteminfos WHERE iid IN( SELECT ID FROM #Tmp)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值