带有前导填充零的SQL标识

时间:2010-08-07 05:49:42

标签: sql sql-server padding identity-column

我在表格中标记了一个列

create table Identitytest(
    number int  identity(1,001) not null,
    value varchar(500)
)

我需要将标识列递增为001,002,003等等。

数据库显示它正在插入1,2,3

如何做到这一点?

7 个答案:

答案 0 :(得分:15)

正如其他人已经正确地指出的那样 - 一个INT永远不会有前导零 - 它只保留值,这就是全部(这就是好的)。

如果您需要一些额外的格式,您可以随时向表中添加计算列,例如:

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber AS  RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

这样,您的INT IDENTITY将用作INT并始终包含数值,而DisplayNumber包含001, 002, ... 014, 015, .....等等 - 自动,始终保持最新。

由于它是一个持久字段,它现在是表的一部分,你可以对它进行查询,甚至在其上放一个索引以加快查询速度:

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

当然,您可以在计算列的定义中使用任何格式,因此您还可以添加前缀或其他内容:

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber 
      AS  'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

因此,在这种情况下,您的DisplayNumber将为ABC-001, ABC-002, ...,依此类推。

您可以获得两全其美的效果 - 保持您的INT IDENTITY是数字并由SQL Server自动增加,您可以随意定义显示格式并随时可用。

答案 1 :(得分:6)

如果您想显示带有前导零的number列,只需将其填入SELECT语句即可。它是一个数字,它不会以前导零作为整数存储。

SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest

3是输出显示中您想要的总字符数。

答案 2 :(得分:3)

如果您同时需要自动递增数字(只能是数字)和数字的字母表示,您可以考虑查看计算列。

以下是一些可以帮助您前进的链接:

答案 3 :(得分:2)

你为什么需要那个?作为一个整数,001与1相同。如果你想要的是显示或其他目的,创建另一列并在那里做你的工作(你可以在表上插入一个触发器的一部分,看起来在新插入的行中,并在列中相应地创建条目。

答案 4 :(得分:1)

我有一个表,我正在存储一个整数,但是用户希望看到它是XXX,即使它有零,所以我写了这段代码

declare @a int
set @a=1


select replicate('0',3-len(@a))+ cast(@a as varchar(4))

答案 5 :(得分:1)

这是另一种方法:

create table TEST_T (ui int NOT NULL identity, name varchar(10))
insert into TEST_T values ( 'FRED' )
select NAME, ui, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_T from TEST_T
go
/* NOTE: A view could be created with a calculated column instead of the identity column. */
create view TEST_V as select NAME, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_V from TEST_T go
go
select * from TEST_V
drop view TEST_V
drop table TEST_T

没有像向表中添加列那样多的数据重复(?),也不需要在select语句中指定列。

答案 6 :(得分:0)

  

我需要标识列   递增为001,002,003等

     

数据库显示它是   插入1,2,3等。

SQL数据库存储值,而不是用于写入这些值的文字。 002 2.就像1 + 1 2.您希望SELECT 1 + 1显示字符串“1 + 1”而不是2?

如果要将前导零存储在列中,则必须使用字符类型。但是,您无法使用AUTOINCREMENT / IDENTITY

你可能真正想要的东西就像程序中的printf("%03d", number)一样从数据库中读取。