今天完成任务之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/p/1093791.html