sqlserver字串拆分(split)方法彙總
--方法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 = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO
--方法1:迴圈擷取法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字串
@split varchar(10) --資料分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO
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]
GO
--方法2:使用臨時性分拆輔助表法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字串
@split varchar(10) --資料分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
--建立分拆處理的輔助表(使用者定義函式中只能操作表變數)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b
INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID
RETURN
END
GO
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]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1)
drop table [dbo].[tb_splitSTR]
GO
--方法3:使用永久性分拆輔助表法
--字串分拆輔助表
SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
FROM syscolumns a,syscolumns b
GO
--字串分拆處理函式
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字串
@split varchar(10) --資料分隔符
)RETURNS TABLE
AS
RETURN(
SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
FROM tb_splitSTR
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)
GO
--方法4:利用sql server2005的OUTER APPLY
CREATE FUNCTION [dbo].[fn_Split]
(
@str VARCHAR(MAX) ,
@split VARCHAR(10)
)
RETURNS TABLE
AS
RETURN
( SELECT B.id
FROM ( SELECT [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>')
+ '</v>')
) A
OUTER APPLY ( SELECT id = N.v.value('.' , 'varchar(100)')
FROM A.[value].nodes('/v') N ( v )
) B
)
備註說明:
方法4必須在sql server2005下才可以執行
——————————————————————————————————————————
在本人看來, 方法4最值得使用。
Example:
SELECT id FROM fn_Split('a,b,d,c',',')
相關文章
- SqlServer中字串拆分仿造split功能SQLServer字串
- java——split的用法(字串拆分)Java字串
- oracle拆分逗號分隔字串 實現splitOracle字串
- sqlserver拆分字串函式 及應用SQLServer字串函式
- sqlserver 拆分SQLServer
- php拆分數字字串方法PHP字串
- Oracle索引塊分裂split資訊彙總Oracle索引
- Linux split拆分檔案Linux
- Oracle index索引塊分裂split資訊彙總OracleIndex索引
- JavaScript字串API彙總JavaScript字串API
- SQL字串操作彙總SQL字串
- SQLServer用函式實現對字串按照特定字元進行拆分SQLServer函式字串字元
- 檔案拆分命令 split 使用簡介
- PHP字串函式彙總PHP字串函式
- Oracle vs PostgreSQL DBA(13)- 拆分(split)分割槽OracleSQL
- PHP字串函式大彙總PHP字串函式
- PHP部分字串函式彙總PHP字串函式
- 字串操作彙總(不斷新增中)字串
- 拆分合並字串(轉)字串
- 轉貼_字串分隔_拆分字串
- Oracle 常用方法彙總Oracle
- java split進行字串分割Java字串
- Sql字串分組Split函式的兩種實現方法SQL字串函式
- mssql sqlserver 判斷字串大小寫的方法分享SQLServer字串
- python拆分中英文混合字串 - 按中文拆分Python字串
- js字串方法總結JS字串
- java 拆分與合併字串Java字串
- CoffeeScript攻略3.7:拆分字串字串
- SQL Server中如何拆分字串SQLServer字串
- JavaScript資料方法彙總JavaScript
- GCC使用基本方法彙總GC
- JavaScript split() 分割字串生成陣列JavaScript字串陣列
- python split()對字串分離Python字串
- php中的chunk_split()和str_split()字串函式PHP字串函式
- SQLServer索引維護常用方法總結SQLServer索引
- T-SQL技巧收集——拆分字串SQL字串
- 軟體測試方法彙總
- Windows 8關機方法彙總Windows