注意 :编码方案 bmfa 3-2-2 是可变的

解决方案 »

  1.   

    bm 按照 bmfa 第一级 为3 如101 就是一级
                  第二级为2 如10101 应该是 二级
                  第三级为2 如 1010101 一共 7位 就是 三级
      

  2.   

    --测试环境
    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 行)
      

  3.   

    这个不具普遍性 如果 
    bmfa=4-2-2-2
    bm           js
    2301         1
    100101       2
    55019901     3
    8888888888   4
      

  4.   

    这个那
    to:zlp321002(心中的明月) ( ) 
    呵呵 这个行不行阿 一句话
      

  5.   

    select bm,len(bm)%3 from bmfa
      

  6.   

    呵呵 又是凑数的 我的bmfa是动态变化的
      

  7.   

    刚才发错了,应该是:  select bm , (len(bm)-2)/2+1 from bmfa
      

  8.   

    如果下面这条语句不能解决你的问题,我的QQ:549711582,请加我,我们细谈好吗?  select bm , (len(bm)-2)/2+1 from bmfa
      

  9.   

    这个不具普遍性 如果 
    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)我不明白你到底想要干什么?????
      

  10.   

    你的BM字段是字符型还是数字型,你用的后台是Sql Server吗
      

  11.   

    1。bm 用的是字符型 
    2。我指bmfa的代码 是不固定的 
    3。bm根据bmfa的格式的数据
      

  12.   

    2。我指bmfa的代码 是不固定的 ? 不是太明白,bmfa是一个表吧。其结构是不是这样:
       bm        js
       101       1
       50501     2
       a030304   3
       你是不是要根据bm字段的内容自动生成js字段呢?
       当js=n 时,bm的位数是不是n*2+1啊?3。bm根据bmfa的格式的数据
       这句不明白
       
      

  13.   

    1。科目编码方案 bmfa 是通过一个参数表取过来的参数 可能是4-2-2 可能是 3-2-2-2-
    这是由客户自定义的 
    2。bm 根据bmfa 的定义格式 来具体输入代码 如果bmfa为 4-2-2 bm 就是 10010101
                                             如果bmfa为 3-2-2 bm 就是 1010101
    我希望 知道bm属于第几级
     
      

  14.   


    按我的理解,你的意思是根据长度来判定所属的级别!
    那直接用语句:
    case len(m) when b then '1级' when m then '2级' when f then '3级' when a then '4级' end
      

  15.   

    我们讨论一下,你看看以下方法能否实现算法如下:
         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上给我留言,我很想就这问题和你讨论一下
      

  16.   


    我明白楼主的意思,但是楼主搞错了:你的科目编码方案 bmfa 可以是像你这样定义的
    但在你的各个应用编码表中,必需要有这样三个字段:bm(编码)sjbm(上级编码),bmjc(编码级次)
    而不象楼主所说的是要:根据bm(编码)来计算:sjbm(上级编码)和bmjc(编码级次)。
    sjbm(上级编码)和bmjc(编码级次)应该在你的后台程序中通过用户的输入和你自已的程序判断计算得到而不是在数据库中计算到得,这样设计更为合理;
    再有就是你要在你的用户介面中通过对用户的输入与你的编码方案表对照:一是来判断用户输入的合法性;二是计算出你的另外两个字段(sjbm(上级编码)和bmjc(编码级次))的数值;
    本来给你一个用VB写的例子,但这里不能用粘贴(郁闷),所以就赖了,
      

  17.   

    我自己 做了一个 函数 搞定了 本来想在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