--方法0:動態SQL法declare @s varchar(100),@sql varchar(1000)set @s='1,2,3,4,5,6,7,8,9,10'set @sql='select col='''+ replace(@s,',',''' union all select ''')+''''PRINT @sqlexec (@sql)
 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[f_splitSTR]GO--方法1:循環截取法CREATE FUNCTION f_splitSTR(@s   varchar(8000),   --待分拆的字元串@split varchar(10)     --數據分隔符)RETURNS @re TABLE(col varchar(100))ASBEGIN DECLARE @splitlen int SET @splitlen=LEN(@split+'a')-2 WHILE CHARINDEX(@split,@s)>0 BEGIN  INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))  SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'') END INSERT @re VALUES(@s) RETURNENDGO
 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[f_splitSTR]GO--方法2:使用臨時性分拆輔助表法CREATE FUNCTION f_splitSTR(@s   varchar(8000),  --待分拆的字元串@split varchar(10)     --數據分隔符)RETURNS @re TABLE(col varchar(100))ASBEGIN --創建分拆處理的輔助表(用戶定義函數中只能操作表變數) DECLARE @t TABLE(ID int IDENTITY,b bit) INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b
 INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) FROM @t WHERE ID<=LEN(@s+'a')   AND CHARINDEX(@split,@split+@s,ID)=ID RETURNENDGO
 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[f_splitSTR]GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1)drop table [dbo].[tb_splitSTR]GO--方法3:使用永久性分拆輔助表法--字元串分拆輔助表SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTRFROM syscolumns a,syscolumns bGO--字元串分拆處理函數CREATE FUNCTION f_splitSTR(@s     varchar(8000),  --待分拆的字元串@split  varchar(10)     --數據分隔符)RETURNS TABLEASRETURN( SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100)) FROM tb_splitSTR WHERE ID<=LEN(@s+'a')   AND CHARINDEX(@split,@split+@s,ID)=ID)GO
⑵ oracle 如何用sql實現split功能
本函數可以將「目標字元串」以「指定字元串」進行拆分,並通過表結構返回結果。代碼如下:
CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
  RETURN str_split 
  PIPELINED
AS
  v_length  NUMBER := LENGTH(p_string);
  v_start  NUMBER := 1;
  v_index  NUMBER;
BEGIN
  WHILE(v_start <= v_length)
  LOOP
    v_index := INSTR(p_string, p_delimiter, v_start);
    IF v_index = 0
    THEN
      PIPE ROW(SUBSTR(p_string, v_start));
      v_start := v_length + 1;
    ELSE
      PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
      v_start := v_index + 1;
    END IF;
  END LOOP;
  RETURN;
END splitstr;
創建完畢後,我們來測試一下,例如執行如下SQL:
select * from table(splitstr('Hello,Cnblogs!',','));
其輸出結果為一個兩行的表,如下圖:

⑶ 在SQL中,如何將一個用冒號分隔開的值,分隔成一個數組!!
表值函數實現Split方法
 1 Create FUNCTION [dbo].[SplitToTable]
 2 (
 3     @SplitString nvarchar(max),
 4     @Separator nvarchar(10)=' '
 5 )
 6 RETURNS @SplitStringsTable TABLE
 7 (
 8 [id] int identity(1,1),
 9 [value] nvarchar(max)
10 )
11 AS
12 BEGIN
13     DECLARE @CurrentIndex int;
14     DECLARE @NextIndex int;
15     DECLARE @ReturnText nvarchar(max);
16     SELECT @CurrentIndex=1;
17     WHILE(@CurrentIndex<=len(@SplitString))
18         BEGIN
19             SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
20             IF(@NextIndex=0 OR @NextIndex IS NULL)
21                 SELECT @NextIndex=len(@SplitString)+1;
22                 SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
23                 INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
24                 SELECT @CurrentIndex=@NextIndex+1;
25             END
26     RETURN;
27 END
select * FROm dbo.SplitToTable('111:b2222:323232:32d:e:323232f:g3222', ':')
⑷ Split(SQL)
Split()是將字元串分割成數組;
sql是不是一個函數或者語句?如果向樓上說的是個函數的話應該是Split(SQL())才對啊
樓主說的不是很清楚,SQL沒有單獨出現的;
如果是個範例說明,SQL代表一個查詢的結果,那一個是查詢出來的分割的代表,而非SQL本身分成若干份:
做個範例樓主應該就明白了:
var str="a1-a2-a3-a4-a5";//假設有這樣一個字元串;
sql的執行結果是"-";
var a=str.Split("-");
那麼a這個數組應該是:
a[0]=a1;
a[1]=a2;
a[2]=a3;
a[3]=a4;
a[4]=a5;
如果SQL的運行結果是"-a";
var a=str.Split("-a");
那麼a這個數組應該是:
a[0]=a1
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;
⑸ sql 如何以逗號為分隔符分割一個欄位的值
可用substring函數。
創建測試表及數據:
createtabletest
(idvarchar(10));
insertintotestvalues('123abc');
insertintotestvalues('456def');
insertintotestvalues('789ghi');
執行:
selectsubstring(id,1,3)+','+substring(id,4,3)asidfromtest
結果截圖:

也就顯示成了用逗號分隔的樣子。
⑹ sql如何根據隔符分割字元串
資料庫自帶的substring()、charindex()函數,可以根據需要截取字元串,但並不能實現分割
自己寫分割函數,以下可以參考:
createfunctionGetStr
(
@strvarchar(1024),--要分割的字元串
@splitvarchar(10),--分隔符號
@indexint--取第幾個元素
)
returnsvarchar(1024)
as
begin
declare@locationint
declare@startint
declare@nextint
declare@seedint
set@str=ltrim(rtrim(@str))
set@start=1
set@next=1
set@seed=len(@split)
set@location=charindex(@split,@str)
while@location<>0and@index>@next
begin
set@start=@location+@seed
set@location=charindex(@split,@str,@start)
set@next=@next+1
end
if@location=0select@location=len(@str)+1
returnsubstring(@str,@start,@location-@start)
end
⑺ sql中的split
CREATE function [dbo].[split](@aString varchar(8000),@pattern varchar(10))
returns @temp table([Sid]  [int] IDENTITY (1, 1) NOT NULL ,a varchar(100))
--實現split功能 的函數
--說明:@aString,寬拿字元串山戚,如a:b:c;@pattern,分隔標志,如慎唯搭 :
as 
begin
    declare @i int
    set @aString=rtrim(ltrim(@aString))
    set @i=charindex(@pattern,@aString)
    while @i>=1
    begin
        insert @temp values(left(@aString,@i-1))
        set @aString=substring(@aString,@i+1,len(@aString)-@i)
        set @i=charindex(@pattern,@aString)
    end
    if @aString<>'' 
       insert @temp values(@aString)
    return 
end
GO
