今天完成任务之SQL中len的使用

由于昨天搬家,经理感觉有点对不住了,呵呵,其实 是我自己对不住了,
上午就很辛苦的将算法写好,在自己的思路和流程下一个一个数据库都在我的手下形成了编码,其实上午根本没有忙什么都在想怎么搞了,下午才真正的将它给弄好,下面讲解下我自己听哈子。
首先。我们将原来的表请出来一个并且在里面添加一个字段,然后进行自动的编写代号。好下面来写具体的内容。
首先在我的思路里面有要在不同的情况下执行不同的方法,所以我真正的用到了len函数。
其实len函数也很简单,我是这么写的
len ( @item_clsno )
也就是求出@item_clsno的变量的长度。

那么我们开始我们的具体的思路了,开始i先备份一张表
SELECT   *   INTO  dbo.table_zong1
FROM  dbo.table_zong
ORDER   BY  item_clsno
然后我们就在这个表上操作咯

 

DECLARE  YOUBIAO  CURSOR   FOR
SELECT   [ id ] , [ item_clsno ]
FROM  dbo.table_zong1


open  YOUBIAO
declare  
@id   bigint ,
@item_clsno   varchar ( 510 )

fetch   next   from  YOUBIAO
into   @id , @item_clsno
if   len ( @item_clsno ) = 3
 
begin
  
update  dbo.table_zong1
  
set  item_subno = @item_clsno + ' 0 '
  
where   [ id ] = @id
 
end
else   if   len ( @item_clsno ) = 2
 
begin  
  
update  dbo.table_zong1
  
set  item_subno = @item_clsno + ' 00 '
  
where   [ id ] = @id
 
end
 
else   if   len ( @item_clsno ) = 4
  
update  dbo.table_zong1
  
set  item_subno = @item_clsno
  
where   [ id ] = @id
  
while   @@fetch_status = 0
 
begin
  
fetch   next   from  YOUBIAO
  
into   @id , @item_clsno
  
if   len ( @item_clsno ) = 3
   
begin
   
update  dbo.table_zong1
   
set  item_subno = @item_clsno + ' 0 '
   
where   [ id ] = @id
   
end
  
else   if   len ( @item_clsno ) = 2
   
begin  
   
update  dbo.table_zong1
   
set  item_subno = @item_clsno + ' 00 '
   
where   [ id ] = @id
   
end
  
else
   
begin
   
update  dbo.table_zong1
   
set  item_subno = @item_clsno
   
where   [ id ] = @id
   
end
 
end

close  YOUBIAO


然后再执行
这个语句。问刚才改好的数据添加编码

DEALLOCATE  YOUBIAO
DECLARE  YOUBIAO  CURSOR   FOR
SELECT   [ id ] , [ item_subno ]
FROM  dbo.table_zong1

close  YOUBIAO
open  YOUBIAO
declare  
@id   bigint ,
@item_subno   varchar ( 510 ),
@bianliang   int ,
@item_subno2   varchar ( 510 ),
@bianliangvarchar   varchar ( 510 )

Fetch   next   from  YOUBIAO
INTO   @id , @item_subno

set   @bianliang = 1
set   @item_subno2 = @item_subno
set   @bianliangvarchar = ' 000 ' + cast ( @bianliang   as   nvarchar ( 510 ))
UPDATE  dbo.table_zong1
SET  item_subno  =   @item_subno + @bianliangvarchar
WHERE   [ id ] = @id

 

WHILE   @@FETCH_STATUS = 0
BEGIN  
    
Fetch   next   from  YOUBIAO
    
INTO   @id , @item_subno
    
if   @item_subno2 = @item_subno
    
begin
        
set   @bianliang = @bianliang + 1
 
if   len ( @bianliang ) = 1
 
begin
          
set   @bianliangvarchar = ' 000 ' + cast ( @bianliang   as   nvarchar ( 510 ))
         
UPDATE   dbo.table_zong1
         
SET  item_subno = @item_subno + @bianliangvarchar
          
WHERE   [ id ] = @id
 
end
 
else   if   len ( @bianliang ) = 2
 
begin
  
set   @bianliangvarchar = ' 00 ' + cast ( @bianliang   as   nvarchar ( 510 ))
         
UPDATE   dbo.table_zong1
         
SET  item_subno = @item_subno + @bianliangvarchar
          
WHERE   [ id ] = @id
 
end
 
else   if   len ( @bianliang ) = 3
 
begin
  
set   @bianliangvarchar = ' 0 ' + cast ( @bianliang   as   nvarchar ( 510 ))
         
UPDATE   dbo.table_zong1
         
SET  item_subno = @item_subno + @bianliangvarchar
          
WHERE   [ id ] = @id
 
end
 
else
 
begin
  
set   @bianliangvarchar = cast ( @bianliang   as   nvarchar ( 510 ))
         
UPDATE   dbo.table_zong1
         
SET  item_subno = @item_subno + @bianliangvarchar
          
WHERE   [ id ] = @id
 
end
        
    
end
    
else
    
begin
        
set   @item_subno2 = @item_subno
        
set   @bianliang = 1
        
set   @bianliangvarchar = ' 000 ' + cast ( @bianliang   as   nvarchar ( 510 ))
         
UPDATE   dbo.table_zong1
         
SET  item_subno = @item_subno + @bianliangvarchar
          
WHERE   [ id ] = @id
    
end
    
END
CLOSE  YOUBIAO


这样编码就算是完成了。

到最后经理说我的编码有问题,原来是8位到13位的编码没有取价格最低的,没办法重新做了一下子,感觉还可以就是要了点时间,因为6万条数据所花的时间太长了。

转载于:https://www.cnblogs.com/itgmhujia/archive/2008/03/06/1093791.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值