我自己 做了一个 函数 搞定了 本来想在sql写一条语句的看来不行阿 to:lbkbox(遗忘的诺言) 哈哈 程序的数据表 不是我开发的 我只是通过现有表 导出成要求的格式 to:wdswcy(一) 其实 一般都是 x=3 时 bmfa=3-2-2-2 x=4 时 bmfa=4-2-2-2 x=5 时 bmfa=5-2-2-2 也可能bmfa=7-3-4-5 我们不能限定死他的 既然口子给别人了 你不能不让别人这样去设的 所以要普遍性的东西 CREATE FUNCTION dbo.[outputlevel] ( @kmdm CHAR(30))RETURNS INT AS BEGIN declare @i int set @i=1 declare @len int set @len=0 declare @bmfa char(20) select @bmfa=REPLACE(kmbmfa ,'-','' )from gl_ztcs while @i <=len(@bmfa) begin set @len = @len + convert(int,substring(@bmfa,@i,1)) if len(@kmdm) =@len break set @i=@i+1 end return @i END
第二级为2 如10101 应该是 二级
第三级为2 如 1010101 一共 7位 就是 三级
declare @t table(bm varchar(10))
insert into @t select '101'
union all select '10101'
union all select '1010101'
--查询
select bm=bm,
级次=len(bm)-len(replace(bm,0,''))
from @t
--结果
bm 级次
---------- -----------
101 1
10101 2
1010101 3(所影响的行数为 3 行)
bmfa=4-2-2-2
bm js
2301 1
100101 2
55019901 3
8888888888 4
to:zlp321002(心中的明月) ( )
呵呵 这个行不行阿 一句话
bmfa=4-2-2-2
bm js
2301 1
100101 2
55019901 3
8888888888 4用下边这条语句可以啊? select bm , ((len(bm)-2)/2+1) as js from bmfa
或
update bmfa set js=((len(bm)-2)/2+1)我不明白你到底想要干什么?????
2。我指bmfa的代码 是不固定的
3。bm根据bmfa的格式的数据
bm js
101 1
50501 2
a030304 3
你是不是要根据bm字段的内容自动生成js字段呢?
当js=n 时,bm的位数是不是n*2+1啊?3。bm根据bmfa的格式的数据
这句不明白
这是由客户自定义的
2。bm 根据bmfa 的定义格式 来具体输入代码 如果bmfa为 4-2-2 bm 就是 10010101
如果bmfa为 3-2-2 bm 就是 1010101
我希望 知道bm属于第几级
按我的理解,你的意思是根据长度来判定所属的级别!
那直接用语句:
case len(m) when b then '1级' when m then '2级' when f then '3级' when a then '4级' end
js=((len(bm)-x+1)+1)/2其中:
x=3 时 bmfa=3-2-2-2
x=4 时 bmfa=4-2-2-2
x=5 时 bmfa=5-2-2-2
则: x=cast(left(@bmfa,1) as int)
如果你的bmfa=7-3-4-5的话,我就没法子了
不论这方法能否实现,你最好在QQ上给我留言,我很想就这问题和你讨论一下
我明白楼主的意思,但是楼主搞错了:你的科目编码方案 bmfa 可以是像你这样定义的
但在你的各个应用编码表中,必需要有这样三个字段:bm(编码)sjbm(上级编码),bmjc(编码级次)
而不象楼主所说的是要:根据bm(编码)来计算:sjbm(上级编码)和bmjc(编码级次)。
sjbm(上级编码)和bmjc(编码级次)应该在你的后台程序中通过用户的输入和你自已的程序判断计算得到而不是在数据库中计算到得,这样设计更为合理;
再有就是你要在你的用户介面中通过对用户的输入与你的编码方案表对照:一是来判断用户输入的合法性;二是计算出你的另外两个字段(sjbm(上级编码)和bmjc(编码级次))的数值;
本来给你一个用VB写的例子,但这里不能用粘贴(郁闷),所以就赖了,
to:lbkbox(遗忘的诺言) 哈哈 程序的数据表 不是我开发的 我只是通过现有表 导出成要求的格式
to:wdswcy(一) 其实 一般都是 x=3 时 bmfa=3-2-2-2
x=4 时 bmfa=4-2-2-2
x=5 时 bmfa=5-2-2-2
也可能bmfa=7-3-4-5 我们不能限定死他的 既然口子给别人了 你不能不让别人这样去设的
所以要普遍性的东西
CREATE FUNCTION dbo.[outputlevel]
( @kmdm CHAR(30))RETURNS INT
AS
BEGIN
declare @i int
set @i=1
declare @len int
set @len=0
declare @bmfa char(20)
select @bmfa=REPLACE(kmbmfa ,'-','' )from gl_ztcs
while @i <=len(@bmfa)
begin
set @len = @len + convert(int,substring(@bmfa,@i,1))
if len(@kmdm) =@len
break
set @i=@i+1
end return @i
END