㈠ sql 求带分隔符字符串中,重复字符串的个数
CreatefunctionFn_ContantsStrCount--创建函数
(
@CurrStrvarchar(max),--现有字符串
@FindStrvarchar(50),--需要查找的字符串
@Charsvarchar(5)=null--字符串中包含的字符
)
returnsint
as
begin
declare@ResultCountint=0--计数
declare@Tempvarchar(max)=''
if(isnull(@Chars,'')='')
set@Chars=','
while(CHARINDEX(@Chars,@CurrStr)>0)
begin
set@Temp=REPLACE(SUBSTRING(@CurrStr,1,CHARINDEX(@Chars,@CurrStr)),@Chars,'')
set@CurrStr=SUBSTRING(@CurrStr,CHARINDEX(@Chars,@CurrStr)+1,LEN(@CurrStr))
if(@Temp=@FindStr)
set@ResultCount+=1
end
if(@CurrStr=@FindStr)
set@ResultCount+=1
return@ResultCount
end
go
selectdbo.Fn_ContantsStrCount('aaa:bbb:ccc:ddd:aaa:ccc:ddd:aaa','aaa',null)
selectdbo.Fn_ContantsStrCount('aaa:bbb:ccc:ddd:aaa:ccc:ddd:aaa','aaa',':')
你看看满足你的要求不,函数,是可以放在查询语句中执行的东东
㈡ sql怎么查询字符串中的重复
这个是学生作业还是具体的应用。
直接使用SQL语句是不行的,变通的方案有很多,要看你具体的应用目的,来选择更高效的方案
㈢ 动态sql中怎么绑定多个重复出现参数
目前我知道的绑定方式是按顺序一个个对应着动态sql的占位符,如
open cur_Record for L_sql using P_TestKey,P_SchoolKey,P_TestKey,P_TestKey,P_ClassKey
但我想问的是有没有其他的绑定方法,如简化成
open cur_Record for L_sql using P_TestKey,P_SchoolKey,P_ClassKey
这样的话比较简洁清晰
㈣ sql动态查询占位符查询
sql语句,不带条件
条件拼接变量1
if 有值
条件拼接变量 + and + 条件
如:
select 1 from a
条件拼接变量
有值 name = 'aaa'
拼sql
'select 1 from a ' + 'where ' + 条件拼接变量
最后用
exec(sql语句)
㈤ SQl 字符串重复问题
说个思路吧,你就写个判断条件,
select
*
from
tableName
where
(截取地址的后6个字符,匹配这条记录的地址,若出现次数
=
2
)
具体函数忘了,,你查查,SQL
的
字符串处理函数
基本上可以查处所有的,(除非重复的字符长度小于6)
㈥ SQL 中怎么查找一列中从重复出现的字符,急急急,在线等!!!
什么数据库?oracle的话像这样:
--批量分割字符串
--构造辅助用整数表
createtableNums(nintprimarykey);
declare
mint;
begin
select1intomfromal;
insertintoNumsselect1fromal;
while(m<1000000/2)
loop
insertintoNumsselectm+nfromNums;
selectm*2intomfromal;
endloop;
insertintoNumsselectm+nfromNumswherem+n<=1000000;
end;
--测试数据
withtmp(gh,yph)as(
select1,'28,15,13,10,8,3,29,12,21,31,9,20,18,30'fromalunionall
select2,'4,19,6,24,16,11,22,25,27,5,26,14,23,1,17'fromalunionall
select3,'59,58,45,46,41,43,39,42,36,37,44,430,43,40'fromal)
--利用辅助整数表批量分割字符串
selectyph,count(*)from(
SELECTgh,
SUBSTR(yph,n,instr(yph||',',',',n)-n)ASyph
FROMtmp
JOINNums
ONn<=LENGTH(yph)
ANDSUBSTR(','||yph,n,1)=','
)t
whereyph='28'
groupbyyph;
㈦ 用SQL写一个重复字符串一定次数的函数Repeat 。
CREATE function dbo.Repeat(@key as varchar(256),@number as int)
returns varchar(max)
as
begin
declare @char varchar(max)
set @char = ''
while (@number>0 )
begin
select @char = @char+@key
set @number = @number -1
end
return @char
end
㈧ 动态SQL中的重复占位符如何与绑定变量进行
BEGIN calc_stats(:x, :x, :y, :x); END 是一个PL/SQL 代码段,而非 insert into t6 (a,b,c) values (:x,:y,:x) 这样的DML,标准SQL语句。
在EXECUTE IMMEDIATE 中,利用USING语句绑定变量时,Oracle遵循针对PL/SQL存储过程使用占位符名称匹配的原则,而针对SQL语句则采用占位符位置匹配的原则。
PL/SQL 用户指南与参考 中的 例子如下:
动态SQL语句中的占位符与USING子句中的绑定参数是位置关联的,而不是名称关联。所以,如果在SQL语句中同样的占位符出现两次或多次,那么,它的每次出现都必须与一个USING子句中的绑定参数相关联。例如下面的动态字符串:
sql_stmt := 'INSERT INTO payroll VALUES (:x, :x, :y, :x)';
我们可以为动态字符串编写对应的USING子句:
EXECUTE IMMEDIATE sql_stmt USING a, a, b, a;
但 是,动态PL/SQL块中只有唯一的占位符才与USING子句中的绑定参数按位置对应。所以,如果一个占位符在PL/SQL块中出现两次或多次,那么所有 这样相同的占位符都只与USING语句中的一个绑定参数相对应。比如下面的例子,第一个占位符(x)与第一个绑定参数(a)关联,第二个占位符(y)与第 二个绑定参数(b)关联。
DECLARE
a NUMBER := 4;
b NUMBER := 7;
BEGIN
plsql_block := 'BEGIN calc_stats(:x, :x, :y, :x); END';
EXECUTE IMMEDIATE plsql_block
USING a, b;
...
END;
---------------------------------------------------------------------------------------------
CREATE TABLE T1 (N1 NUMBER, N2 NUMBER,N3 NUMBER,N4 NUMBER);
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO T1(N1,N2,N3,N4) VALUES (:N1,:N2,:N2,:N1)' USING 1,2;
END;
/
*
ERROR at line 1:
ORA-01008: not all variables bound
ORA-06512: at line 2
BEGIN
EXECUTE IMMEDIATE 'BEGIN INSERT INTO T1(N1,N2,N3,N4) VALUES (:N1,:N2,:N2,:N1); END;' USING 1,2;
END;
/
PL/SQL procere successfully completed.
SELECT * FROM T1;
N1 N2 N3 N4
---------- ---------- ---------- ----------
1 2 2 1
----------------------------------------------