数据表中有字段 ID 自动编号 ZF varchar(255) SZ float;
记录:
ID ZF ZZ
1 ABCDABCDABCDAB 35
2 BCDBDDBCBCDBBD
3 DDDABCCCDBBCDDzf 中每一个字符都对应一个数值
case zf[位置] do
A : 2
B : 3
C : 1
D : 4
sz 为所有字符的的数值之和.
即记录1 中,ZZ 数值是 2+3+1+4+2+3+1+4+2+3+1+4+2+3 即 35数据量很大用循环做太慢了,请教sql语句! 望指点...
记录:
ID ZF ZZ
1 ABCDABCDABCDAB 35
2 BCDBDDBCBCDBBD
3 DDDABCCCDBBCDDzf 中每一个字符都对应一个数值
case zf[位置] do
A : 2
B : 3
C : 1
D : 4
sz 为所有字符的的数值之和.
即记录1 中,ZZ 数值是 2+3+1+4+2+3+1+4+2+3+1+4+2+3 即 35数据量很大用循环做太慢了,请教sql语句! 望指点...
create or replace function SF_GET_STRCOUNT(vc_SearchStr varchar2,vc_SeperateStr char)
return integer is
/*
功能:获取用分隔符分隔的字符串数量
作者:XXXXXX
CreateDate:2004-02-09
分隔符分隔的字符串 vc_SearchStr varchar2
分隔符 vc_SeperateStr char
说明:字符串必须以分隔符结尾,因为实际返回的是分隔符数量
*/
l_StrLen Integer;
l_Index Integer;
Result integer;
begin
l_Index := 1;
Result := 0;
l_StrLen := length(vc_SearchStr);
while l_Index < l_StrLen loop
Result := Result + 1;
l_Index := Instr(vc_SearchStr, vc_SeperateStr, 1, Result) + 1;
if l_Index = 1 then
Exit;
end if;
end loop;
if l_Index = 1 then
Result := 0;
end if;
return(Result);
end SF_GET_STRCOUNT;调用方式 SF_GET_STRCOUNT(ABCDABCDABCDAB,A)select SUM(SF_GET_STRCOUNT(L.ZF,A)*M.zf_A+SF_GET_STRCOUNT(L.ZF,B)*M.zf_B+SF_GET_STRCOUNT(L.ZF,C)*M.zf_C+SF_GET_STRCOUNT(L.ZF,D)*M.zf_D) from table1 L,
( select decode(a.case,A,a.zf,0) zf_A,decode(a.case,B,a.zf,0) zf_B,decode(a.case,C,a.zf,0) zf_C,decode(a.case,D,a.zf,0) zf_D from table2 a
) Mok!
如果这样的话你只需要在写一个函数计算类似12344321的值,这样不需将abcd来分别对应判断,可以提高速度
pdbird(老巢) 的方法是用在SQL server中吧。
如果是ACCESS 呢,还有方法吗,初学SQL语句 帮帮忙吧!!
呵呵,设计者是N人啊!
但试了后循环做,大约一秒钟一百条左右。太慢了!
不知各位大侠试过没有!
while not eof do
begin
edit;
fieldbyname('zz').asfloat:=calc(fieldbyname('zf').asstring)//计算函数
next;
end;
然后在提交。 很慢的。初级菜鸟大家来帮忙啊。
另外程序做的差不多了,只是这个地方难以忍受.
其实各个字符的数值设置是这样的:
A B C D
1 //第一个字符 2 3 1 4
2 //第二个字符 2 1 2 3
3 //第三个字符 1 3 2 1
每个字符的数值是不一样的。
在程序中,我把数值设置做成数组,对于每个字符的数值在数组中直接返回的。
2.使用下面的语句看是不是快点
update table set zz=calu(zf) calu() 函数你可以在自定义函数里写.
access自定义函数如何写啊,有没有例子参考一下,我也想知道!谢谢!!!
你可以到access版去问一下.
顺便也要把对应的id读出在DELPHI 里做函数,把ZF作为数组处理,然后把转化的值一起插回去(不插入ZF,而是ZZ,根据ID判定)不知道会不会快点也就是说 字符的转化有DELPHI 来直接处理,与数据库无关。
帮帮忙啊!! 谢谢!