在 SQL 服务器上生成下一个字母数字代码
Generate Next Alphanumeric Code on SQL Server
我需要从上一个代码开始创建连续的 varchar(5) 序列(始终只有 5 个字符)代码。
例如
'00000'、'00001'、'00002'...'00009'、'0000A'、'0000B'...'0000Z'、'00010'、'00011'。 ..'ZZZZZ'.
所以如果我有 @PREVIOUS_CODE = '00000', @NEXT_CODE 将是 '00001'.
如果我有@PREVIOUS_CODE = '00009', @NEXT_CODE 将是 '0000A'
如果我有@PREVIOUS_CODE = '0000Z', @NEXT_CODE 将是 '00010'
所以我需要这样的东西
USE [DATABASE]
GO
CREATE PROCEDURE [dbo].[spGetNextCode]
@PREVIOUS_CODE VARCHAR(5)
AS
DECLARE @NEXT_CODE VARCHAR(5)
DO STUFF
...
SELECT @NEXT_CODE AS NEXT_CODE
GO
有帮助吗?
只需在同一个 table 中保留一个整数计数器并进行转换即可。我在我的一个应用程序中使用了以下 SQL 服务器功能:
CREATE FUNCTION [dbo].[GetAlphanumericCode]
(
@number BIGINT,
@leadingzeroes INT = 0
)
RETURNS varchar(255)
AS
BEGIN
DECLARE @charPool varchar(36)
SET @charPool = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DECLARE @result varchar(255)
IF @number < 0
RETURN ''
IF @number = 0
SET @result = '0'
ELSE BEGIN
SET @result = ''
WHILE (@number > 0)
BEGIN
SET @result = substring(@charPool, @number % 36 + 1, 1) + @result
SET @number = @number / 36
END
END
IF @leadingzeroes > 0 AND len(@result) < @leadingzeroes
SET @result = right(replicate('0', @leadingzeroes) + @result, @leadingzeroes)
RETURN @result
END
重写为存储过程应该是小事一桩
我需要从上一个代码开始创建连续的 varchar(5) 序列(始终只有 5 个字符)代码。
例如
'00000'、'00001'、'00002'...'00009'、'0000A'、'0000B'...'0000Z'、'00010'、'00011'。 ..'ZZZZZ'.
所以如果我有 @PREVIOUS_CODE = '00000', @NEXT_CODE 将是 '00001'.
如果我有@PREVIOUS_CODE = '00009', @NEXT_CODE 将是 '0000A'
如果我有@PREVIOUS_CODE = '0000Z', @NEXT_CODE 将是 '00010'
所以我需要这样的东西
USE [DATABASE]
GO
CREATE PROCEDURE [dbo].[spGetNextCode]
@PREVIOUS_CODE VARCHAR(5)
AS
DECLARE @NEXT_CODE VARCHAR(5)
DO STUFF
...
SELECT @NEXT_CODE AS NEXT_CODE
GO
有帮助吗?
只需在同一个 table 中保留一个整数计数器并进行转换即可。我在我的一个应用程序中使用了以下 SQL 服务器功能:
CREATE FUNCTION [dbo].[GetAlphanumericCode]
(
@number BIGINT,
@leadingzeroes INT = 0
)
RETURNS varchar(255)
AS
BEGIN
DECLARE @charPool varchar(36)
SET @charPool = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DECLARE @result varchar(255)
IF @number < 0
RETURN ''
IF @number = 0
SET @result = '0'
ELSE BEGIN
SET @result = ''
WHILE (@number > 0)
BEGIN
SET @result = substring(@charPool, @number % 36 + 1, 1) + @result
SET @number = @number / 36
END
END
IF @leadingzeroes > 0 AND len(@result) < @leadingzeroes
SET @result = right(replicate('0', @leadingzeroes) + @result, @leadingzeroes)
RETURN @result
END
重写为存储过程应该是小事一桩