sql - 在 SQL Server 上生成下一个字母数字代码

标签 sql sql-server sql-server-2017

我需要从上一个代码开始创建一个连续的 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

有什么帮助吗?

最佳答案

只需在同一个表中保留一个整数计数器并对其进行转换即可。我在我的一个应用程序中使用以下 SQL Server 函数:

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

将其重写为存储过程应该是一个简单的任务

关于sql - 在 SQL Server 上生成下一个字母数字代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53590720/

相关文章:

.net - SQL Server 2017 上的 CLR 严格安全性

sql - 使用 CTE 优化时态表

php - Laravel 删除查询 where is null

mysql - 摆脱慢速子查询

sql-server - OrderBy 中忽略别名

ASP.NET session 状态 Sql Server 模式

.net - Sql 包 Exe 可以在命令行中运行部署后脚本吗?

mysql - 在涉及第二个表中的重复项时有一个左连接 - MYSQL

php - 使用 PHP 的 MySQL 查询中的 If 语句

mysql - 如何使用另一个表中的现有数据和输入值插入新行?