1. 程式人生 > >SQL裡類似SPLIT的分割字串函式

SQL裡類似SPLIT的分割字串函式

-SQL對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是T-SQL不支援陣列,所以處理下來比較麻煩。下邊的函式,實現了象陣列一樣去處理字串。
一,用臨時表作為陣列
create   function   f_split(@c   varchar(2000),@split   varchar(2))  
  returns   @t   table(col   varchar(20))  
  as  
    begin  
   
      while(charindex(@split,@c)<>0)  
        begin  
          insert   @t(col)   values   (substring(@c,1,charindex(@split,@c)-1))  
          set   @c   =   stuff(@c,1,charindex(@split,@c),'')  
        end  
      insert   @t(col)   values   (@c)  
      return  
    end  
  go  
   
  select   *   from   dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')  
   
  drop   function   f_split 
  col                                      
  --------------------    
  dfkd  
  dfdkdf  
  dfdkf  
  dffjk  
   
  (所影響的行數為   4   行)


二、按指定符號分割字串,返回分割後的元素個數,方法很簡單,就是看字串中存在多少個分隔符號,然後再加一,就是要求的結果。
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 @

[email protected]+1
   set @location=charindex(@split,@str,@start)
   set @[email protected]+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 @[email protected][email protected]
   set @location=charindex(@split,@str,@start)
   set @[email protected]+1
 end
 if @location =0 select @location =len(@str)+1
--這兒存在兩種情況:1、字串不存在分隔符號 2、字串中存在分隔符號,跳出while迴圈後,@location為0,那預設為字串後邊有一個分隔符號。
 
 return substring(@str,@start,@[email protected])
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 @[email protected]+1
end

呼叫結果:
1
2
3
4
5

相關推薦

SQL類似SPLIT分割字串函式

-SQL對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是T-SQL不支援陣列,所以處理下來比較麻煩。下邊的函式,實現了象陣列一樣去處理字串。一,用臨時表作為陣列create   function   f_split(@c

使用PL SQL 編寫一個逗號分割字串分割處理函式

create or replace function F_INTELLECT_FIRST_SALES_PROV(var_sales in varchar2, var_first_sales IN VARCHAR2, var_split in V

sql 分隔(split字串轉行

     一對多關係寫成一行資料,強行埋坑,下面是我的解決辦法,在效率方面這樣肯定不如好好構建資料關係,正常去做的快,如果可以我建議你去重構資料表結構 : )  1.mysql 首先建立一個儲存過程,可以將分隔的資料行插入到一個臨時表中 CREATE DEFINER=`

自定義分割字串函式

create function [dbo].[f_split] ( @c varchar(2000),--需要分割的字串(例如:1,2,3,4,5 我|和|你) @split varchar(2)--分隔符(例如 , | $) ) returns @t table(co

boost使用split分割字串

工程中使用boost庫:(設定vs2010環境) 在Library files加上 D:\boost\boost_1_46_0\bin\vc10\lib 在Include files加上 D:\boost\boost_1_46_0使用舉例: // boostTest.cp

split 分割 字串(分隔符如:* ^ : | , .) 及注意點

【1】單個符號作為分隔符         Stringaddress="上海|上海市|閔行區|吳中路";      String[]splitAddress=address.split("\\|");//如果以豎線為分隔符,則split的時候需要加上兩個斜槓【\\】進行轉義

sql按指定符號分割字串,返回分割後指定索引的第幾個元素,象陣列一樣方便

CREATE function Get_StrArrayStrOfIndex ( @str varchar(1024), --要分割的字串 @split varchar(10), --分隔符號 @index int --取第幾個元素 ) returns varchar(1024) as begin decla

Java split 分割 字串(分隔符如:* ^ : | , .) 及注意點 要轉義

(1)split表示式,其實就是一個正則表示式。* ^ | 等符號在正則表示式中屬於一種有特殊含義的字元,如果使用此種字元作為分隔符,必須使用轉義符即\加以轉義。 (2)如果使用多個分隔符則需要藉助

String.split()分割字串,轉義字元

1、String.split()String有個方法是分割字串  .split()。但是有寫字串是需要轉義才能分割,不然就會出錯。需要轉義的字串:.  $  |   (   )  [   {   ^  ?  *  +  \\      共12個特殊字元,遇到以這些字元進行分割

SQL 按照特定字元分割字串

新建表值函式: USE TestDb GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[f_split](@c VARCHAR(2000), @split VARC

split 分割 字串(分隔符如:* ^ : | , .) 及注意點

【1】單個符號作為分隔符 String address=”上海|上海市|閔行區|吳中路”; String[] splitAddress=address.split(“\|”); //如果以豎線為分隔符,則split的時候需要加上兩個

幾個常用的C查詢分割字串函式

搜尋字串函式 strstr原型: extern char *strstr (char *__haystack, const char *__needle)  所在標頭檔案:#include <s

MySQL實現類似SPLIT分割字串函式

CREATE function Get_StrArrayStrOfIndex ( @str varchar(1024), --要分割的字串 @split varchar(10), --分隔符號 @index int --取第幾個元素 ) returns varchar(1024) as be

SQL根據下標,返回split分割字串

-- ============================================= -- Author: -- Create date: -- Description: 根據下標(0開始),返回split分割後字串,越界返回空字串 --

精簡程式碼:Python的split方法函式可以分割字串成列表,預設是以空格作為分隔符sep來分割字串

 Python的split方法函式可以分割字串成列表,預設是以空格作為分隔符sep來分割字串。 In [1]: s = "www jeapedu com" In [2]: print s.split()   ['www', 'jeapedu', 'com']  

c/cpp中如何分割字串類似split的功能

在python中,如果要求當前時間的unix時間戳,我特別喜歡這麼用: import time timestr = time.time() timestamp = int(timestr.split('.')[0]) 這裡的split函式,我非常喜歡,在java、c#和

SQL ServerSplit函式

ALTERFUNCTION dbo.f_splitSTR(     @svarchar(8000),       --要分拆的字串   @splitvarchar(10),     --資料分隔符   @posint--取第幾個     )RETURNSvarchar(100)     AS     BEG

ORACLE(PL/SQL) 根據字元分割SPLIT字串返回陣列

ORACLE沒有提供現成的函式來進行字串的分割,網上有很多中現實方法,本文介紹一種我自己的實現方式。主要是使用Oracle內部函式instr和substr函式的方式來實現。 CREATE OR REP

SQL Server用SPLIT函數分割字符串

圖片 技術 函數 分享圖片 select 9.png mage img pos SELECT *FROM Split(‘1,2,w,e,q‘, ‘,‘); SQL Server用SPLIT函數分割字符串

SQL Server 字串函式

 在開發T-SQL時,經常會需要對字串進行各種各樣的操作,下面介紹常用的字串函式。 1、獲取字元的ASCII碼 ASCII     ASCII碼是對字元的標準編碼。要獲取字元的ASCII碼就可以通過呼叫ASCII函式來實現。     語法結構: ASCII(espression)   這裡的e