当前位置: 代码迷 >> Sql Server >> 关于递增序列的有关问题
  详细解决方案

关于递增序列的有关问题

热度:88   发布时间:2016-04-24 10:02:03.0
关于递增序列的问题
在查询时增加一个递增序列,5位,如:00001,但是00009后面的是0000A, (A--Z),不再是00010,  就是说每一位都是36进位(0--9,A--Z),  0000Z后面将是00010
怎么做?
------解决方案--------------------
这个之前在哪看到过,应该是用ASCII码实现
------解决方案--------------------
自己写一个36进制的函数,然后调用
这里是一个例子,改成其他进制很方便
http://bbs.csdn.net/topics/390876207
------解决方案--------------------
create FUNCTION To36Hex(@value int)
RETURNS varchar(50)
AS
BEGIN
    DECLARE @seq char(36)
    DECLARE @result varchar(50)
    DECLARE @digit char(1)
    SET @seq = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

    SET @result = SUBSTRING(@seq, (@value%36)+1, 1)

    WHILE @value > 0
    BEGIN
         
     SET @digit = SUBSTRING(@seq, ((@value/36)%36)+1, 1)

     SET @value = @value/36
     IF @value <> 0 SET @result = @digit + @result
    END 

    RETURN @result
END
GO


------解决方案--------------------
或者,还是采用int自增
应用显示为36进制格式
------解决方案--------------------
引用:
自己写一个36进制的函数,然后调用
这里是一个例子,改成其他进制很方便
http://bbs.csdn.net/topics/390876207
这里是一个例子,改成其他进制很方便
------解决方案--------------------
试试这样,其实就是字符mapping:

DECLARE @feed  varchar(100)='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

SELECT SUBSTRING(@feed,x.ID%LEN(@feed),1), * FROM x

------解决方案--------------------

DECLARE @iRow INT=0
CREATE TABLE t1
(
id INT IDENTITY(1,1) NOT NULL,
v VARCHAR(100)
)
DECLARE @iRow INT=0
WHILE @iRow<500
BEGIN
 INSERT INTO t1  (  v ) VALUES ( CAST(@iRow AS VARCHAR(100)) )
 set @iRow=@iRow+1
END
DECLARE @feed  varchar(100)='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SELECT SUBSTRING(@feed,case when t1.ID%LEN(@feed)=0 THEN LEN(@feed) ELSE t1.ID%LEN(@feed) END,1), * FROM t1

------解决方案--------------------
提供另一種方法

create function func_To36Hex(@decimalNum int)
returns varchar(5)
as
begin
declare @reminder int
declare @hexStr varchar(50)=''
declare @system int=36
while @decimalNum>=@system
begin
set @reminder=@decimalNum%@system
set @decimalNum=@decimalNum/@system
if(@reminder<=9)
   begin
     set @hexStr=@reminder+@hexStr
   end
else
   begin
     set @hexStr=CHAR(ASCII('A')+(@reminder-10))+@hexStr 
   end  
end
set @reminder=@decimalNum%@system
if(@reminder<=9)
   begin
     set @hexStr=@reminder+@hexStr
   end
else
   begin
     set @hexStr=CHAR(ASCII('A')+(@reminder-10))+@hexStr 
   end
return right('00000'+Convert(varchar(5),@hexStr),5) 
end
  相关解决方案