首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成字母数字客户ID

生成字母数字客户ID
EN

Stack Overflow用户
提问于 2014-04-07 20:18:36
回答 2查看 223关注 0票数 1

我正在从遗留系统中迁移数据。为了适应我们的新系统,需要生成适当的客户ID。我正在寻找一种方法,以产生唯一的字母数字ID的部分基于客户的姓氏。要使用的约定是客户姓氏的前3个字母,后面是一个3位数字标识符。例如:

代码语言:javascript
复制
Smith, John = SMI001
Smith, Robert = SMI002
Jones, David = JON001

新系统将自动生成新的客户id,我只需要一个脚本来运行一次数据库,我甚至不知道从哪里开始。谢谢你能提供的任何帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-07 20:43:41

测试数据

代码语言:javascript
复制
DECLARE @Table TABLE(LastName NVARCHAR(50), FirstName NVARCHAR(50), ID NVARCHAR(50))
INSERT INTO @Table(LastName, FirstName) VALUES 
('Smith', 'John'),('Smith', 'Robert'),('Jones', 'David'),('Smith', 'John'),
('Smith', 'John'),('Smith', 'Robert'),('Jones', 'David'),('Smith', 'John'),
('Smith', 'John'),('Smith', 'Robert'),('Jones', 'David'),('Smith', 'John'),
('Smith', 'John'),('Smith', 'Robert'),('Jones', 'David'),('Smith', 'John')

查询

代码语言: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

结果集

代码语言: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      ║ SMI00010 ║
║ Smith    ║ John      ║ SMI00011 ║
║ Smith    ║ Robert    ║ SMI00012 ║
╚══════════╩═══════════╩══════════╝
票数 1
EN

Stack Overflow用户

发布于 2014-04-07 20:43:45

下面是一个查询,演示如何生成这样的ID:

代码语言:javascript
复制
SELECT  FirstName,
        LastName,
        Code = UPPER(LEFT(LastName, 3)) 
                + RIGHT('000' 
                    + CAST(
                        Row_Number() OVER ( PARTITION BY LastName 
                                            ORDER BY FirstName) 
                        AS NVARCHAR(3))
                    , 3)
FROM    [Table1]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22922250

复制
相关文章

相似问题

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