T-SQL對字串的處理能力比較弱,比如我要迴圈遍曆象1,2,3,4,5這樣的字串,如果用數組的話,遍曆很簡單,但是T-SQL不支援數組,所以處理下來比較麻煩。下邊的函數,實現了象數組一樣去處理字串。
一、按指定符號分割字串,返回分割後的元素個數,方法很簡單,就是看字串中存在多少個分隔字元號,然後再加一,就是要求的結果。
- CREATE function Get_StrArrayLength
- (
- @str varchar(1024), --要分割的字串
- @split varchar(10) --分隔字元號
- )
- returns int
- as
- begin
- declare @location int
- declare @start int
- declare @length int
-
- set @str=ltrim(rtrim(@str))
- set @location=charindex(@split,@str)
- set @length=1
- while @location<>0
- begin
- set @start=@location+1
- set @location=charindex(@split,@str,@start)
- set @length=@length+1
- end
- return @length
- end
調用樣本:select dbo.Get_StrArrayLength('78,1,2,3',',')
傳回值:4
二、按指定符號分割字串,返回分割後指定索引的第幾個元素,象數組一樣方便
- CREATE function Get_StrArrayStrOfIndex
- (
- @str varchar(1024), --要分割的字串
- @split varchar(10), --分隔字元號
- @index int --取第幾個元素
- )
- returns varchar(1024)
- as
- begin
- declare @location int
- declare @start int
- declare @next int
- declare @seed int
-
- set @str=ltrim(rtrim(@str))
- set @start=1
- set @next=1
- set @seed=len(@split)
-
- set @location=charindex(@split,@str)
- while @location<>0 and @index>@next
- begin
- set @start=@location+@seed
- set @location=charindex(@split,@str,@start)
- set @next=@next+1
- end
- if @location =0 select @location =len(@str)+1
- --這兒存在兩種情況:1、字串不存在分隔字元號 2、字串中存在分隔字元號,跳出while迴圈後,@location為0,那預設為字串後邊有一個分隔字元號。
-
- return substring(@str,@start,@location-@start)
- end
調用樣本:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)
傳回值:9
三、結合上邊兩個函數,象數組一樣遍曆字串中的元素
- declare @str varchar(50)
- set @str='1,2,3,4,5'
- declare @next int
- set @next=1
- while @next<=dbo.Get_StrArrayLength(@str,',')
- begin
- print dbo.Get_StrArrayStrOfIndex(@str,',',@next)
- set @next=@next+1
- end
調用結果:
1
2
3
4
5
Http://www.616.cn Http://game.616.cn
Flex Web棋牌遊戲,視頻轉換軟體,蜘蛛爬蟲程式 歡迎您來購買!溜一溜網!