关于递增序列的问题

zhaokeke2004 2014-09-02 01:56:59
在查询时增加一个递增序列,5位,如:00001,但是00009后面的是0000A, (A--Z),不再是00010, 就是说每一位都是36进位(0--9,A--Z), 0000Z后面将是00010
怎么做?
...全文
444 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
reenjie 2014-09-02
  • 打赏
  • 举报
回复
提供另一種方法

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
道素 2014-09-02
  • 打赏
  • 举报
回复

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
道素 2014-09-02
  • 打赏
  • 举报
回复
试试这样,其实就是字符mapping:

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

SELECT SUBSTRING(@feed,x.ID%LEN(@feed),1), * FROM x
freecodex 2014-09-02
  • 打赏
  • 举报
回复
引用 2 楼 u010024618 的回复:
自己写一个36进制的函数,然后调用 这里是一个例子,改成其他进制很方便 http://bbs.csdn.net/topics/390876207
这里是一个例子,改成其他进制很方便
haitao 2014-09-02
  • 打赏
  • 举报
回复
或者,还是采用int自增 应用显示为36进制格式
發糞塗牆 2014-09-02
  • 打赏
  • 举报
回复
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

freecodex 2014-09-02
  • 打赏
  • 举报
回复
自己写一个36进制的函数,然后调用 这里是一个例子,改成其他进制很方便 http://bbs.csdn.net/topics/390876207
hleb231 2014-09-02
  • 打赏
  • 举报
回复
这个之前在哪看到过,应该是用ASCII码实现

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧