ms sql server 字串分隔
1.方案1如下:
-- =============================================
-- Description: split函式 -- Debug:select * from dbo.Fun_Split('ABC:BC:C:D:E',':')
-- 修改時間:
-- 修改人:
-- =============================================
create FUNCTION [dbo].[F_StringSplit]
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
RETURNS
@TEMP_Table TABLE ([text] varchar(2000)) -- collate Chinese_Taiwan_Stroke_CS_AS) --Chinese_Taiwan_Stroke_CI_AS 不區分大小寫
AS
BEGIN
DECLARE @i int
SET @SourceSql=rtrim(ltrim(@SourceSql))
if RIGHT(@SourceSql,LEN(@StrSeprate))<>@StrSeprate --追加代碼
set @SourceSql=@SourceSql+@StrSeprate --追加代碼
SET @i=charindex(@StrSeprate,@SourceSql)
WHILE @i>=1
BEGIN
if rtrim(ltrim(left(@SourceSql,@i-1)))='' --追加代碼start
begin
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
continue
end--追加代碼end
INSERT @TEMP_Table VALUES(left(@SourceSql,@i-1))
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
END
RETURN
END
---例如----------------------
select * from F_StringSplit(',45,89,66,78,59,,41,36,',',')
2.方案使用xml方式
create function F_StringSplit
(
@source varchar(8000),
@splitStr varchar(20)
)
returns @tmp table(result xml)
as
begin
set @source=LTRIM(RTRIM(isnull(@source,'')))
set @splitStr=LTRIM(RTRIM(isnull(@splitStr,'')))
declare @xml xml,@delStr varchar(6)
set @delStr=''
if @source<>'' and @splitStr<>''
begin
set @xml=CONVERT(xml,'<v>'+REPLACE(@source,@splitStr,'</v><v>')+'</v>')
set @xml.modify('delete /v[.=sql:variable("@delStr")]')
insert into @tmp select t.v.query('.') from @xml.nodes('/v/text()') t(v)
end
return
end
---例如----------------------
select * from F_StringSplit(',45,89,66,78,59,,41,36,',',')
uj5u.com熱心網友回復:
感謝分享,建議寫成博客。uj5u.com熱心網友回復:
感謝分享PS: 如果使用 sqlserver 2017 ,有自帶的函式。
uj5u.com熱心網友回復:
感謝分享, 建議寫成博客。另外, 你可以參考我的博客:
https://blog.csdn.net/yenange/article/details/79788877
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/123669.html
標籤:基礎類
上一篇:找一個實作給人臉配圖案的程式
下一篇:請問python題
