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...