當前位置:首頁 » 編程語言 » sql按逗號分割在in
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql按逗號分割在in

發布時間: 2022-12-14 10:04:23

sql 如何以逗號為分隔符分割一個欄位的值

可用substring函數。

創建測試表及數據:

createtabletest
(idvarchar(10));

insertintotestvalues('123abc');
insertintotestvalues('456def');
insertintotestvalues('789ghi');

執行:

selectsubstring(id,1,3)+','+substring(id,4,3)asidfromtest

結果截圖:

也就顯示成了用逗號分隔的樣子。

② SQL逗號分割一列數據的值,將結果變成一行多列

createtable#t(IDint,Contentvarchar(4000))
insertinto#t(ID,Content)
select1,'22,5000,3000'
unionallselect2,'1,35,200,2'
unionallselect3,'802,22'
unionallselect4,'213,354,2002,22,500'
select*from#t

declare@sqlnvarchar(4000),@iint
set@i=1
whileexists(select1from#twhereContent<>'')
begin
set@sql='altertable#taddPKQ'+convert(varchar,@i)+'int'
exec(@sql)
set@sql='declare@locintupdate#tset@loc=charindex('','',Content),PKQ'
+convert(varchar,@i)+'=convert(int,case@locwhen0thenContentelse'
+'substring(Content,1,@loc-1)end),Content=case@locwhen0then''''else'
+'substring(Content,@loc+1,len(Content)-@loc)endwhereContent<>'''''
exec(@sql)
set@i=@i+1
end
select*from#t

③ SQL中逗號分隔的查詢結果轉換成單個字元串放到in語句里

select student from xxhd a, school b where patindex('%' || a.school || '%',b.school)>0

④ SQL 觸發管理器 提取用逗號分割的單號

如果要把tradelist整張表全部修改AllTotal 我想用游標可以實現
Declare @alltotal float--金額
Declare @TradeNO2 varchar(max)--單號
Declare cur cursor for select TradeNO2from tradelist
open Cur
fetch next from cur into @TradeNO2
while(@@fetch_status=0)
begin
Select @alltotal=sum(TotalMoney) from apilist where TradeNO in (Select TradeNO2 from tradelist where TradeNo2=@TradeNO2 )
update tradelist set AllTotal=@AllTotal where TradeNo2=@TradeNO2
fetch next from cur into @TradeNO2
end
close cur
deallocate cur

如果只是用觸發器tradelist表插入一條修改一條的話
就可以
Declare @TradeNO2 varchar(max)--單號
update tradelist set AllTotal=Select sum(TotalMoney) from apilist where TradeNO in (Select TradeNO2 from tradelist where TradeNo2=@TradeNO2 )
where TradeNo2=@TradeNO2

應為你都是用「,」號隔開 所以剛好用 in 去查詢apilist表中哪些訂單 然後匯總。

⑤ SQL中用逗號來分隔數據

用,分隔數據的讀取:
<%
a="a,b,c,d,e,f,g,h,j,k,l"
b=split(a,",")
for i=0 to ubound(b)
response.write(b(i))
response.Write ","
next
%>

用,分隔數據的存入:可以使用多選下拉菜單.
<select name="source" size="7" multiple id="source">
<option value="1">fff</option>
<option value="2">tttt</option>
<option value="3">www</option>
<option value="4">aaa</option>
</select>
你可以試一下,當你選擇了多個項目時,request.form("source")的值就是1,2,3 這種格式

⑥ 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字元串怎麼按逗號分割

我沒看懂你的意思但是我有一樣個批量刪除的比如
/*
使用存儲過程實現如下功能,批量刪除實際選中的多個反饋活動。
*/
--包規范
create or replace package pak_activeinfo
as
procere sp_activeinfo
(
i_activeid varchar2
);
end pak_activeinfo;
--包主體
create or replace package body pak_activeinfo
as
procere sp_activeinfo
(
i_activeid varchar2
)
as
activeid1 varchar2(100);
activeid2 varchar2(100);
activeid3 varchar2(10000) := i_activeid;
a number;
b number;
begin
savepoint sp;--回滾點
select instr(activeid3,',') into a from al;
b := a-1;
for i in 1..floor(length(activeid3)/b) loop--改正
--獲取第一個編號
select substr(activeid3,1,b) into activeid1 from al;
--修改表
update activeinfo set status = 1 where activeid = activeid1;
--截取第一個編號
select ltrim(activeid3,activeid1) into activeid2 from al;
--去掉,號
select ltrim(activeid2,',') into activeid3 from al;
end loop;
commit;
exception
when no_data_found then
dbms_output.put_line('失敗!');
when others then
dbms_output.put_line('讀去失敗!原因是:'||sqlerrm);
rollback to savepoint sp;
end sp_activeinfo;
end pak_activeinfo;
--測試

begin
pak_activeinfo.sp_activeinfo('1000,1001,1002');
end;
能看懂嗎?
按長度用循環去掉逗號!

希望對你有幫助!

⑧ 如何用sql語句將一列的很多值用逗號分隔開插入

1、將傳遞過來的值進行分割 用,分割成數組
例如:$var=explode(",",$str);
2、循環數組
3、在循環內查詢sql
查詢時候 有兩種方法 按照sql語法或者PHP語法
sql 用 find_in_set(str1,str2);
php 用 strpos(str1,str2,start);
具體語法格式自己搜索一下吧。

⑨ 編寫一個sql語句,把b列中的數據用逗號分隔開,變成很多謝謝

這個我做過,拆分逗號分隔符變列
select a,
t.ca,
c.lv,instr(t.ca, ',', 1, c.lv) + 1,
substr(t.ca,
instr(t.ca, ',', 1, c.lv) + 1,
instr(t.ca, ',', 1, c.lv + 1) -
(instr(t.ca, ',', 1, c.lv) + 1)) AS c
from (select a,
',' || b || ',' AS ca,
b,
LENGTH(b),
length(b || ','),
REPLACE(b, ','),
length(REPLACE(b, ',')), --刪除逗號的長度
nvl(length(REPLACE(b, ',')), 0), --空值長度為空,因此要將空值替換為0
length(b || ',') - nvl(length(REPLACE(b, ',')), 0) AS cnt --以逗號分隔的字元串個數,先在原來的長度上加1 計算去除所有逗號後字元串長度,再,拿這個
FROM TEST_A) t,
(select LEVEL lv from al CONNECT BY LEVEL <= 100) c
where c.lv <= t.cnt --逗號數量在100以內

⑩ sql以逗號分隔的字元串查詢每個字元出現的個數

sql中可以自定義函數來統計逗號隔開的字元串的數量:
參考如下:
drop function search_dh
go
CREATE FUNCTION search_dh(@str varchar(max))
returns int--設置返回值是returns
AS
BEGIN
DECLARE @result int --返回逗號個數
declare @j int
set @result = 0
set @j = 1
while @j<len(@str)
begin
if substring(@str,@j,1) = ',' --@j是開始位置,1位置參數是長度值
begin
set @result = @result+1
end
set @j = @j+1 --如果出現無限循環請檢查參數是否加1以及位置問題
end
return @result --返回結果
END
用法:
select dbo.search_dh ('a,b,c') --引用自定義函數時需要加上dbo.前綴
SELECT x = SUBSTRING('abcdef',2, 2)