『壹』 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
『貳』 PL/SQL 拆解字元串語句
我提供一個拆分字元串的通用函數給你,你再寫這種SQL:
1、先建立一個包,定義數組類型:
CREATE OR REPLACE PACKAGE pkg_string is
-- Purpose : 字元串處理
-- Public type declarations
TYPE StringArray IS VARRAY(2000) OF VARCHAR2(2000);
END pkg_string;
2、拆分字元串的通用函數:
CREATE OR REPLACE FUNCTION fun_ParseToArray(
a_SourceString IN VARCHAR2, --源字元串
a_Delimiter IN VARCHAR2 --拆分的分隔符
) RETURN pkg_string.StringArray IS
-- ********************************************************
-- 根據分隔符拆分字元串為數組
-- ********************************************************
v_Result pkg_string.StringArray; --數組
iCount INTEGER;
iBegin INTEGER;
sValue VARCHAR2(2000);
sSplitString VARCHAR2(2000);
BEGIN
--檢查參數
IF a_SourceString IS NULL OR a_Delimiter IS NULL THEN
RETURN(v_Result);
END IF;
IF a_SourceString = '' THEN
RETURN(v_Result);
END IF;
--初始化數組
v_Result := pkg_string.StringArray();
--Only one entry was found
IF instr(a_SourceString,a_Delimiter) = 0 THEN
-- 數組加1維
v_Result.extend();
-- 將數據存入數組
v_Result(1) := a_SourceString;
RETURN(v_Result);
END IF;
iCount := 0;
sSplitString := a_SourceString;
LOOP
iBegin := INSTR(sSplitString,a_Delimiter);
EXIT WHEN iBegin < 1;
sValue := Substr(sSplitString,1,iBegin - 1);
sSplitString := SubStr(sSplitString,iBegin + 1);
-- 計數器加1
iCount := iCount + 1;
-- 數組加1維
v_Result.extend();
-- 將數據存入數組
v_Result(iCount) := sValue;
END LOOP;
--Set last entry
sSplitString := SubStr(sSplitString, iBegin);
--Update array and counter if necessary
IF Length(sSplitString) > 0 THEN
-- 計數器加1
iCount := iCount + 1;
-- 數組加1維
v_Result.extend();
-- 將數據存入數組
v_Result(iCount) := sSplitString;
END IF;
RETURN(v_Result);
EXCEPTION
WHEN others THEN
return v_Result ;
END fun_ParseToArray;
3、組成SQL
...
vs_row pkg_string.StringArray;
vs_column pkg_string.StringArray;
...
vs_row := fun_ParseToArray(你的一列數據,'#');
--再用for循環拆分vs_row的列:
vs_column(j) := fun_ParseToArray(vs_row(i),'|');
再把拆分出來的數據入表
『叄』 sql語句進行字元串分割
substr(字元串,截取開始位置,截取長度) //返回截取的字
substr('Hello World',0,1) //返回結果為 'H' *從字元串第一個字元開始截取長度為1的字元串
substr('Hello World',1,1) //返回結果為 'H' *0和1都是表示截取的開始位置為第一個字元
substr('Hello World',2,4) //返回結果為 'ello'
substr('Hello World',-3,3)//返回結果為 'rld' *負數(-i)表示截取的開始位置為字元串右端向左數第i個字元
『肆』 sql語句如何將一個字元串拆分重組
您好,您可以參考下面的程序:
declare @str varchar(20)
set @str = 'abcdefg'
declare @i int
declare @count int
select @count = 0
select @i = len(@str)
declare @str1 varchar(20)
select @str1 = ''
while (@i > @count)
begin
select @count = @count + 1
select @str1 = @str1 + substring (@str,@count,1) + '.'
end
print @str1
這個字元串,你可以從表欄位中獲取,也或者可以直接賦值,最好@str1就是你想要的輸出。
『伍』 在SQL中如何把一列字元串拆分為多列,請高手
--首先,你是按什麼規則拆? 我舉個例子 你要按欄位中的逗號拆開,假設欄位名叫text--用charindex和substring這2個函數 select substring(text,1,charindex(',',text)-1) as [before], substring(text,charindex(',',text),len(text)) as [after] from table
『陸』 sql語句進行字元串分割
你是什麼資料庫?mysql
按照第一個*號前面的字元串分組
然後匯總
select
a,sum(b)
from
pppppp.tablename1
group
by
substring_index(a,'*',1)
limit
0,
50
按照第二個*前面的字元串分組
然後匯總
select
a,sum(b)
from
pppppp.tablename1
group
by
substring_index(a,'*',2)
limit
0,
50
『柒』 sql 如何 拆分 字元串
megetgod的解法不錯。
只是如果數據量小就罷了,數據量大了在SQL中處理效率不高。建議用C、C++寫個小程序處理一下為好。