--实现split功能的函数 (‘a,b,c,d‘)转为记录 --说明:@aString,字符串,如“27,28,29”;@pattern,分隔标志,如“,” -- 例:select * from a where ID in (select Myvalues FROM my_split(@ID, ‘,‘)) -- 例:select Myvalues from dbo.My_split(‘a,b,c,d‘,‘,‘)
create function [dbo].[My_split](@aString varchar(8000),@pattern varchar(10)) returns @temp table([Sid] [int] IDENTITY (1,1) NOT NULL ...
前面提到了记录合并,有了合并需求肯定也会有分离需求,说到字符串分离,大家肯定会想到SPLIT函数,这个在.NET,Java和JS中都有函数,很可惜在SQL SERVER中没有,我们只能自己来写这么一个函数。
首先来分析一下怎么写这个函数,以之前合并的字符串为例,“张三,李四,王五,钱六,赵七,Tom,Amy,Joe,Leo”,现在要将此字符串按照“,”进行分离得到一组数据,现在可以得出这个函数传入变量有两个,一个是目标字符串,我们定义为@string...
FUNCTION dbo.SPLIT(@Long_str NVARCHAR(MAX),@split_str NVARCHAR(100))
RETURNS @tmp TABLE( ID inT IDENTITY PRIMARY KEY, short_str NVARCHAR(MAX)
)
AS
BEGIN DECLARE @short_str NVARCHAR(MAX),@split_str_length int,@split_str_Position_Begin intSET @split_str_length = LEN(@split_str) SET @Long_str=REPLACE(REPLACE(@Long_str,CHAR(10),‘‘),CHAR(13),‘‘)IF CHARIN...
USE [Test]2 GO3 /****** Object: UserDefinedFunction [dbo].[Split] Script Date: 2017/4/14 23:04:08 ******/4 SET ANSI_NULLS ON5 GO6 SET QUOTED_IDENTIFIER ON7 GO8 CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=‘,‘,@string NVARCHAR(max))9 RETURNS @ResultTab TABLE (
10 Id INT ,
11 Res NVARCHAR(500)
12 )
13 AS
14 BEGIN
15 DECLARE @Num INT
16
17 IF(@string IS NOT ...
在以逗号拼接而成的字符串,传入给IN字句的元素字符串中包涵了1400多个元素
两种做法分别为 AND e.ssPfCityId IN ( SELECT CAST(value AS INT) FROM STRING_SPLIT(‘110000,310000,120000,210100,210200,210400,210800,211200,350100,350500,350200,350800,350700,350900,441200,441300,440500,445100,450100,451000,450800,450300,451100,450200,450900,450500,450400,...
value from TF_NJVALUES(‘3C457A2D-188B-4D99-A822-2968054E1FB8,3C457A2D-188B-4D99-A822-2968054E1FB8‘)
CREATE FUNCTION TF_NJVALUES ( @P0 varchar(max) --需要截取的字符 ) RETURNS @OUT_TABLE TABLE(value VARCHAR(max)) AS BEGIN DECLARE @SQL varchar(max),@output varchar(50)set @P0=case when RIGHT(@P0,1)=‘,‘ then @P0 else @P0+‘,‘ endwhile CHARINDEX(‘,‘,@P0)>0beginset @output=LEFT(@P0,CHARIND...
----------------------------------------------------------------------
-- 版权:2011
-- 时间:2011-06-17
-- 用途:切分字符串,将忽略连续分隔符和分隔符之间的空字符
-- 用法:SELECT * FROM [dbo].[WF_Split](‘a,b,c,d‘,‘,‘);
-- 返回表结构:
-- id 自增主键
-- rs 分隔符切分的每个段落
----------------------------------------------------------------------
USE QPTreasureDB
GO
IF EXISTS (SEL...
SELECT *FROM Split(‘1,2,w,e,q‘, ‘,‘); SQL Server用SPLIT函数分割字符串标签:sel body es2017 分享图片 字符 sql .com alt server 本文系统来源:http://www.cnblogs.com/sanday/p/8057603.html
100),@sql varchar(1000)
set @s=‘1,2,3,4,5,6,7,8,9,10‘
set @sql=‘select col=‘‘‘+ replace(@s,‘,‘,‘‘‘ union all select ‘‘‘)+‘‘‘‘
PRINT @sql
exec (@sql)--方法1:循环截取法
if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[f_splitSTR]‘) and xtype in (N‘FN‘, N‘IF‘, N‘TF‘))
drop function [dbo].[f_splitSTR]
GOCREATE FUNCTION f_splitSTR(
@s varchar(8000), -...
1 USE [Test]2 GO3 /****** Object: UserDefinedFunction [dbo].[Split] Script Date: 2017/4/14 23:04:08 ******/4 SET ANSI_NULLS ON5 GO6 SET QUOTED_IDENTIFIER ON7 GO8 CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=‘,‘,@string NVARCHAR(max))9 RETURNS @ResultTab TABLE (
10 Id INT ,
11 Res NVARCHAR(500)
12 )
13 AS
14 BEGIN
15 DECLARE @Num INT
16
17 IF(@string IS NO...
FUNCTION [dnt_split]
(
@splitstring NVARCHAR(4000),
@separator CHAR(1) = ‘,‘
)
RETURNS @splitstringstable TABLE
(
[item] NVARCHAR(200)
)
AS
BEGIN
DECLARE @currentindex INT
DECLARE @nextindex INT
DECLARE @returntext NVARCHAR(200)
SELECT @currentindex=1
WHILE(@currentindex<=datalength(@splitstring)/2)
BEGIN
SELECT @nextindex=charindex(@separator,@splitstring,@cur...
@str NVARCHAR(MAX) = N‘ADS,ADFD,AGF,SDFGSFD,DSFG,RET,TRY,T,ADF,GSF,UY,QWERQ‘把它转存为表:
DECLARE @dump_data AS TABLE([value] NVARCHAR(MAX))
INSERT INTO @dump_data ([value]) SELECT [value] FROM STRING_SPLIT(@str,‘,‘)Source Code
反转,需要把临时表这列[value] 转换为一个字符串:
SELECT STRING_AGG([value], ‘,‘)
FROM @dump_dataSource Code
其实STRING_AGG这函数,还可以对新串联的字符进行排序...
declare @dt1 datetime, @dt2 datetime, @dt3 datetime, @dt4 datetimedeclare @tb1 table (str varchar(100))
declare @tb2 table (str varchar(100))
declare @tb3 table (str varchar(100))declare @c1 int, @c2 int,@c3 int
select @c1 = 0, @c2 = 0, @c3 = 0 select @dt1 = getdate()while @c1 < 1000
begininsert into @tb1(str)select *from dbo.f_splitStrByCharIndex(‘1,2,3,4,5‘)select @c1 = @c1 + 1
endselect ...
之前曾有一篇POST是关于用CTE实现Split,这种方法已经比传统的方法高效了。今天我们就这个方法与CLR实现的Split做比较。在CLR实现Split函数的确很简单,dotnet framework本身就有这个function了。 我们新建一个c#-数据库工程,然后建立一个用户自定义函数,Co 之前曾有一篇POST是关于用CTE实现Split,这种方法已经比传统的方法高效了。今天我们就这个方法与CLR实现的Split做比较。在CLR实现Split函数的确很简单,dotnet framework本...
--方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s=1,2,3,4,5,6,7,8,9,10 set @sql=select col=+ replace(@s,,, union all select )+ PRINT @sql exec (@sql) if exists (select * from dbo.sysobjects where id = o--方法0:动态SQL法declare @s varchar(100),@sql varchar(1000)set @s=1,2,3,4,5,6,7,8,9,10set @sql=select col=+ replace(@s,,, union all select )+PRINT @sqlexec (@sql)if exists (selec...