我在我的表格中将一列标记为“Identity”
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
我希望将身份列自动增加为001,002,003
等。
但数据库显示它插入的是1,2,3
等。
这该怎么做呢?
我在我的表格中将一列标记为“Identity”
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
我希望将身份列自动增加为001,002,003
等。
但数据库显示它插入的是1,2,3
等。
这该怎么做呢?
正如其他人已经正确指出的那样——整数(INT)从不带有前导零——它只是保存值而已(这样很好)。
如果您需要一些额外的格式,您可以在表中添加一个计算列,例如:
ALTER TABLE dbo.Identitytest
ADD DisplayNumber AS RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED
这样,您的INT IDENTITY将被用作整数并始终包含数字值,而 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等等
。
你可以兼顾两者的优势-你保留了SQL Server自动增加的数字类型的ID,并且你可以定义任何你喜欢的显示格式并且随时可用。
SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest
3
是你希望在输出显示中总共有的字符数。
||
而不是 +
? - dan04你为什么需要这个呢?作为整数,001和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
与向表中添加列并且不需要在选择语句中指定该列相比,数据重复情况要少一些。
declare @a int
set @a=1
select replicate('0',3-len(@a))+ cast(@a as varchar(4))