我在表格中标记了一个列
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
我需要将标识列递增为001,002,003
等等。
数据库显示它正在插入1,2,3
等
如何做到这一点?
答案 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)
一样从数据库中读取。