为每行创建7位数代码作为ID

时间:2017-04-27 17:36:14

标签: sql sql-server tsql sql-server-2014

我想在SQL server 2014中生成ID,它将是varchar(7)。我知道标识列,但我想要做的是创建基于表的SEQ_ID的ID。它应该以C开头,长度为7以下是一个例子: -

TABLE A
   SEQ_NO       NAME
    1             a
    12             b
    30             c
    401            d

所需的输出是: -

SEQ    ID         NAME
1    C000001       a   
12   C000012        b
30   C000030        c
401  C000401         d

考虑使用复制和标识列,但这无助于我获得所需的输出。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

使用right()

select 'C'+right('000000'+convert(varchar(6),seq_no),6)

演示:

create table a (seq_no int, name varchar(16))
insert into a values
 (1 ,'a') ,(12 ,'b') ,(30 ,'c') ,(401,'d') 

select *
  , Id = 'C'+right('000000'+convert(varchar(6),seq_no),6)
from a

rextester演示:http://rextester.com/XVQ74081

返回:

+--------+------+---------+
| seq_no | name |   Id    |
+--------+------+---------+
|      1 | a    | C000001 |
|     12 | b    | C000012 |
|     30 | c    | C000030 |
|    401 | d    | C000401 |
+--------+------+---------+

答案 1 :(得分:2)

您可以使用REPLICATE获取它。

SELECT SEQ_NO AS SEQ,
       CONCAT('C', REPLICATE('0', 6 - LEN(SQL_NO)), CAST(SEQ_NO AS VARCHAR(10))) ID
       NAME
FROM   YOUR_TABLE;

答案 2 :(得分:2)

自2014年以来,另一个选项是Format()。

要清楚,Format()有一些很棒的功能,但不知道它是一个高性能。

Select 'C'+format(Seq,'000000')

返回(例如)

C000012