首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >α数字ID格式

α数字ID格式
EN

Stack Overflow用户
提问于 2014-04-25 16:04:42
回答 1查看 66关注 0票数 1

我使用字段LastName的前三个字符生成一个alpha数字ID,然后递增3位数。我在MSSQL 2012中使用的查询是:

代码语言:javascript
复制
SELECT LastName, FirstName,
       UPPER(LEFT(LastName, 3)) + LEFT('000', LEN(ROW_NUMBER()
                   OVER (PARTITION BY  LEFT(LastName, 3)ORDER BY LEFT(LastName, 3)) )+1)
      +  CAST(ROW_NUMBER() OVER (PARTITION BY  
               LEFT(LastName, 3)ORDER BY LEFT(LastName, 3))  AS NVARCHAR(1000)) AS ID
FROM @Table

但是,查询工作相对良好,但是,一旦数值增加到两个,而不是结束于010,则为00010。当数字部分增加到三位数时,也是如此。例如,我希望输出如下所示:

代码语言:javascript
复制
╔══════════╦═══════════╦══════════╗
║ LastName ║ FirstName ║    ID    ║
╠══════════╬═══════════╬══════════╣
║ Jones    ║ David     ║ JON001   ║
║ Jones    ║ David     ║ JON002   ║
║ Jones    ║ David     ║ JON003   ║
║ Jones    ║ David     ║ JON004   ║
║ Smith    ║ John      ║ SMI001   ║
║ Smith    ║ John      ║ SMI002   ║
║ Smith    ║ Robert    ║ SMI003   ║
║ Smith    ║ John      ║ SMI004   ║
║ Smith    ║ John      ║ SMI005   ║
║ Smith    ║ Robert    ║ SMI006   ║
║ Smith    ║ John      ║ SMI007   ║
║ Smith    ║ John      ║ SMI008   ║
║ Smith    ║ Robert    ║ SMI009   ║
║ Smith    ║ John      ║ SMI010   ║
║ Smith    ║ John      ║ SMI011   ║
║ Smith    ║ Robert    ║ SMI012   ║
║  ..      ║    ..     ║   ..     ║
║ Smith    ║ James     ║ SMI100   ║
╚══════════╩═══════════╩══════════╝

我不知道如何处理递增的数值字段。谢谢你能提供的任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-25 16:24:12

从右边而不是左边?

代码语言:javascript
复制
SELECT *, UPPER(LEFT(LastName, 3)) + RIGHT('000' + CAST(ID AS VARCHAR(3)), 3)
FROM (
    SELECT 
        LastName, 
        FirstName, 
        ROW_NUMBER() OVER (PARTITION BY LEFT(LastName, 3) ORDER BY LastName) AS ID
    FROM @table
) T
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23297984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档