① sql 如何以逗號為分隔符分割一個欄位的值
可用substring函數。
創建測試表及數據:
createtabletest
(idvarchar(10));
insertintotestvalues('123abc');
insertintotestvalues('456def');
insertintotestvalues('789ghi');
執行:
selectsubstring(id,1,3)+','+substring(id,4,3)asidfromtest
結果截圖:
也就顯示成了用逗號分隔的樣子。
② sql查詢里 怎麼拆分字元串(按「/」拆分)
先建立一個自定義函數,之個函數非常有用,建議收入自已的資料庫
CREATE FUNCTION mysplit--將以某分隔符分段的字串,按指定的順序號提取子串:
(@strnvarchar(2000),--源字串
@snint,--提取序號
@Delivarchar(1)--分隔符
)
RETURNSvarchar(100)
AS
BEGIN
declare@firstint,@lastint,@resultvarchar(1000),@sn0int
select@sn0=0,@first=0,@LAST=1,@str=@str+REPLICATE(@DELI,1)
while@sn0!=@sn
begin
select@sn0=@sn0+1,@first=@LAST,@last=charindex(@DELI,@str,@LAST)+1
end
if@last-@first-1<0
set@result=''
else
SET@RESULT=SUBSTRING(@str,@FIRST,@LAST-@FIRST-1)
RETURN(@RESULT)
END
查詢方法:
DECLARE@AVARCHAR(100),@BVARCHAR(100),@CVARCHAR(100)
SELECT
@A=DBO.MYSPLIT('A|B|C',1,'|'),
@B=DBO.MYSPLIT('A|B|C',2,'|'),
@C=DBO.MYSPLIT('A|B|C',3,'|')
SELECT@A,@B,@C
③ 使用SQL如何把用逗號等字元隔開的字元串轉換成列表
如何把用逗號等字元隔開的字元串轉換成列表,下面依逗號分隔符為例:
比如有一個字元串,其值為:香港,張家港,北京,上海
用SQL把這個字元串轉換成列表的方法是:
1、方法一
WITH A AS (SELECT '香港,張家港,北京,上海' A FROM DUAL)
SELECT DECODE(B,0,SUBSTR(A,C),SUBSTR(A,C,B-C)) city FROM
(
SELECT A,B,(LAG(B,1,0) OVER(ORDER BY LV))+1 C
FROM(
SELECT A,INSTR(A,',',1,LEVEL) B,LEVEL LV FROM A
CONNECT BY LEVEL <=(LENGTH(A) - LENGTH(REPLACE(A,',','')))+1
)
)
④ SQL語言如何將表內字元串按分割符號分割存儲
用replace函數,將分號或者 @ 符號, 替換為你的其他分隔符。
REPLACE
用第三個表達式替換第一個字元串表達式中出現的所有第二個給定字元串表達式。
語法
REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' )
參數
''string_replace1''
待搜索的字元串表達式。string_replace1 可以是字元數據或二進制數據。
''string_replace2''
待查找的字元串表達式。string_replace2 可以是字元數據或二進制數據。
''string_replace3''
替換用的字元串表達式。string_replace3 可以是字元數據或二進制數據。
返回類型
如果 string_replace(1、2 或 3)是支持的字元數據類型之一,則返回字元數據。如果 string_replace(1、2 或 3)是支持的 binary 數據類型之一,則返回二進制數據。
示例
下例用 xxx 替換 abcdefghi 中的字元串 cde。
SELECT REPLACE(''abcdefghicde'',''cde'',''xxx'')GO
下面是結果集:
------------abxxxfghixxx(1 row(s) affected)
⑤ 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語句,如何截取指定分隔符前字元串
一、用到的函數:substring(' ', , )、charindex(' ',' ')
select SUBSTRING('[email protected]',1,charindex('@','[email protected]')-1)
1.substring(字元串表達式,開始位置,長度):
從一個指定字元串的指定位置截取制定長度的字元;
第一個參數表示被截取的字元串;
第二個參數表示要在第一個參數中開始截取的位置;
第三個參數表示要截取的長度。
例如:select substring('abc123',1,2) →返回ab
從字元串『abc123』的第一個字元開始截取,共截取兩個字元,最後得到『ab』。
2.charindex(字元串表達式1,字元串表達式2[,整數表達式]):
在字元串2中查找字元串1,如果存在返回第一個匹配的位置,如果不存在返回0。如果字元串1和字元串2中有一個是null則返回null。
可以指定在字元串2中查找的起始位置。
例如:select charindex('ab','BCabTabD') → 返回3
select charindex('ab','BCabTabD',4) →返回6
二、用到的函數:left(' ', )、charindex(' ',' ')
select LEFT('[email protected]',charindex('@','[email protected]')-1)
1.left(字元串表達式,整數表達式):
從字元串表達式的最左邊開始截取整數表達式個字元。
例如:select left('abcdef',3) →返回abc
⑦ sql字元串怎麼按逗號分割
[sql]
view
plainprint?
create
or
replace
function
f_intellect_first_sales_prov(var_sales
in
varchar2,
var_first_sales
in
varchar2,
var_split
in
varchar2)
return
varchar2
is
result
varchar2(1);
/****************************************************
**
[sql]
view
plainprint?
**
all
rights
reserved.
**
**
函數名稱:f_intellect_first_sales_province
**
參
數:【名稱】
【類型
】
【說明】
**
var_sales
varchar2
字元串1,逗號分隔的,如'aaa,bbb'
var_first_sales
varchar2
字元串2,逗號分割的,如'cc,aaa'
**
var_split
varchar2
要使用的分隔符
**
返
回
值:result
varchar2
處理後返回的值1/0
**
摘
要:如果字元串2中的某一個分割的字元串在字元串1中就返回1,否則返回0
**
**
當前版本:1.0
**
**
作
者:liuh
**
完成日期:2013年1月29日
**
備
註:
****************************************************/
var_element
varchar2(4000);
var_element2
varchar2(4000);
var_tmp
varchar2(4000);
var_tmp2
varchar2(4000);
begin
result
:=
'0';
var_tmp
:=
var_sales;
var_tmp2
:=
var_first_sales;
if
var_tmp2
is
null
or
var_tmp2
=''
then
return(result);
elsif
var_tmp
is
null
or
var_tmp
=''
then
return(result);
else
/*如果字元串1不為空,在後面加上一個特殊的字元,
這樣循環時就可以直接在循環內部處理,不然需要在最外面循環出再一次處理var_tmp,因為最後一次var_tmp中不含有分隔符,不會進行loop循環*/
var_tmp
:=
var_tmp
||
var_split
||
'-1';
end
if;
while
instr(var_tmp,
var_split)
>
0
loop
/****循環字元串1,每次獲得一個var_element****/
var_element
:=
substr(var_tmp,
1,
instr(var_tmp,
var_split)
-
1);
var_tmp
:=
substr(var_tmp,
instr(var_tmp,
var_split)
+
length(var_split),
length(var_tmp));
while
instr(var_tmp2,
var_split)
>
0
loop
/****循環字元串2,每次獲得一個var_element2****/
var_element2
:=
substr(var_tmp2,
1,
instr(var_tmp2,
var_split)
-
1);
var_tmp2
:=
substr(var_tmp2,
instr(var_tmp2,
var_split)
+
length(var_split),
length(var_tmp2));
/*如果字元串1中有字元串2中的一個值,返回1*/
if
var_element
=
var_element2
then
result
:=
'1';
return(result);
end
if;
end
loop;
/*最後一個截取的var_tmp2
不會進入循環
所以在此處處理
如果字元串1中含有字元串2的一個值,返回1*/
if
var_element
=
var_tmp2
then
result
:=
'1';
return(result);
end
if;
end
loop;
return(result);
end
f_intellect_first_sales_prov;
⑧ sql 在一列中,以某個字元為分隔符,獲取這個分隔符前面的並顯示出來
SELECT LEFT(email,charindex('#',email)-1) FROM test WHERE email like '%#%';
⑨ sql分割字元串查詢,分組統計
首先掌握sql中分割字元串的方法:
declare @sql varchar(2000),@tsql nvarchar(max),@split varchar(100)
set @sql='1,3,5,6,8' --保存的字元
set @split=','--分隔符
select @tsql='select '''+replace(@sql,@split,''' union all select ''')+''''
exec(@tsql)
----完成之後將查詢結果保存在一張臨時表中。
然後使用 select count(*) , 欄位名 from 表名 group by 欄位名 就可以得到您想要的結果了。
希望對您有所幫助!