【问题标题】:Create 7 digit codes as ID for every row为每一行创建 7 位代码作为 ID
【发布时间】:2017-04-27 17:36:14
【问题描述】:

我想在 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

想过使用复制和身份列,但这并不能帮助我获得所需的输出。有什么想法吗?

【问题讨论】:

  • 我的想法是想知道你对第 1000 万行的计划是什么。

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


【解决方案1】:

既然您是 2014 年,那么另一个选项是 Format()。

需要明确的是,Format() 有一些很棒的功能,但它的性能并不高。

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

返回(例如)

C000012

【讨论】:

  • 我喜欢你将表演描述为“不知道表现更好”而不是“已知表现不佳”!
  • @SqlZim 我已经结婚多年了。从我妻子那里学会了如何旋转东西,例如她说“我省了 600 美元”,而我却在想“不,你花了 2,800 美元”
【解决方案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;

【讨论】:

  • 感谢您向我展示如何在这里使用复制!
  • 我很乐意提供帮助。
【解决方案3】:

使用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 |
+--------+------+---------+

【讨论】:

  • @mehtat_90 乐于助人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2023-01-13
  • 2012-03-26
相关资源
最近更新 更多