SQL 支援兩個分格符

2021-05-28 09:13:47 字數 2432 閱讀 3544

use [alisoft]

go/****** object:  userdefinedfunction [dbo].[split]    script date: 09/22/2011 08:49:26 ******/

set ansi_nulls on

goset quoted_identifier on

go/*

[呼叫]:

select * from split('12131:316631,44:5353,4322:323,443:333',',',':')

select * from split('12131,44,4322,443',',','')

[功能]:通過分格符區分

[詳細邏輯]:

@source 源資料

@splits 第乙個分格符

@splits2 第二個分格符

支援第二個分格符為空

[作者]:xlp

[版本號]:v1.0

[最後修改時間]:2011-09-22

[歷史修改記錄]

-------------------

修改人:

修改原因:

修改內容:

-------------------

*/alter function [dbo].[split](

@source varchar(8000),--源資料

@splits varchar(100),--分格符

@splits2 varchar(100)--第二分格符

)    

returns  @tmp table(        

id int identity primary key, --自填列     

short_str varchar(8000),

short_str2 varchar(8000)

)    

as   

begin   

declare @source_tmp varchar(8000),

@short_str varchar(8000),

@short_str1 varchar(8000),

@short_str2 varchar(8000),

@splits_length int   

set @splits_length = len(@splits)    

if charindex(@splits,@source)=1

set @source_tmp=substring(@source,@splits_length+1,len(@source)-@splits_length)

else

set @source_tmp=@source

if charindex(reverse(@splits),reverse(@source_tmp))>1    

set @source_tmp=@source_tmp+@splits    

else   

set @source_tmp=@source_tmp    

while charindex(@splits,@source_tmp)>0    

begin   

set @short_str=substring(@source_tmp,1,charindex(@splits,@source_tmp)-1)    

declare @source_tmp_len int,@splits_position_end int   

set @source_tmp_len = len(@source_tmp)    

set @splits_position_end = len(@short_str)+@splits_length    

set @source_tmp=reverse(substring(reverse(@source_tmp),1,@source_tmp_len-@splits_position_end))

if charindex(@splits2,@short_str)>0

begin

set @short_str1=substring(@short_str,0,charindex(@splits2,@short_str))

set @short_str2=substring(@short_str,charindex(@splits2,@short_str)+1,len(@short_str))

insert into @tmp select @short_str1,@short_str2                                 

endelse

begin

if @short_str<>'' insert into @tmp select @short_str ,''

endend   

return     

end

sql 兩個 in SQL基礎知識 IN運算子

in的作用 in運算子允許您在where子句中指定多個值。in運算子是多個or條件的簡寫。in的語法 select column name s from table name where column name in value1,value2,或者 select column name s fro...

sql中兩個日期相減

sql中兩個日期相減 1 相差天數 select trunc sysdate,yyyy to date 2009 01 04 yyyy mm dd from dual 2 相差月數 select months between trunc sysdate,mm to date 2009 01 yyyy...

解決了兩個sql問題

friday february 17,2006 05 24pm cst 1。decode 不僅僅針對固定值 case when b.aggregateno is null or b.aggregateno then customerid else b.aggregateno end 也可以寫成 de...