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字串
- sqlserver 拆分SQLServer
- Oracle索引塊分裂split資訊彙總Oracle索引
- JavaScript字串API彙總JavaScript字串API
- SQLServer用函式實現對字串按照特定字元進行拆分SQLServer函式字串字元
- PHP字串函式彙總PHP字串函式
- 檔案拆分命令 split 使用簡介
- Oracle vs PostgreSQL DBA(13)- 拆分(split)分割槽OracleSQL
- 文字串接問題彙總字串
- python split()對字串分離Python字串
- SQLServer 2017 install for Windows server 2012_問題彙總SQLServerWindows
- mssql sqlserver 判斷字串大小寫的方法分享SQLServer字串
- Oracle 常用方法彙總Oracle
- Python科研武器庫 - 字串操作 - 字串分隔 split()、rsplit()Python字串
- JavaScript split() 分割字串生成陣列JavaScript字串陣列
- js字串方法總結JS字串
- php中的chunk_split()和str_split()字串函式PHP字串函式
- JavaScript資料方法彙總JavaScript
- mssql sqlserver 從指定字串中獲取數字的方法SQLServer字串
- Python字串常用方法總結Python字串
- linux 故障解決方法彙總Linux
- 軟體測試方法彙總
- es6常用方法彙總
- Perl split字串分割函式用法指南字串函式
- 資料預處理方法彙總
- 解壓命令unzip常用方法彙總
- Vue 元件間通訊方法彙總Vue元件
- js 常用工具方法彙總JS
- 移動端除錯方法彙總除錯
- mysql拆分字串做條件查詢MySql字串
- 用Java拆分字串示例和技巧 -DreamixJava字串
- 解決split無法得到空字串問題字串
- JavaScript陣列與字串相互轉換 join、splitJavaScript陣列字串
- String的split方法的坑
- 正規表示式 split()方法
- JS切割擷取字串方法總結JS字串
- Kotlin——初級篇(八):關於字串(String)常用操作彙總Kotlin字串
- Vagrant box 命令彙總彙總