在查询时增加一个递增序列,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进制格式
------解决方案--------------------
这里是一个例子,改成其他进制很方便
------解决方案--------------------
试试这样,其实就是字符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