当前位置:首页 » 编程语言 » 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)