![](/img/trans.png)
[英]How to add leading padded zeros until 4 characters after that original number should come in SQL Server 2008?
[英]SQL Identity with leading padded zeros
我在表格中将列标记为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将用作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自动增加,您可以随意定义显示格式并随时可用。
如果要显示带前导零的number
列,只需在SELECT
语句中填充它。 它是一个数字,它不会以前导零作为整数存储。
SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest
3
是输出显示中您想要的总字符数。
如果您需要自动递增数字(只能是数字)和数字的字母表示,您可以考虑查看计算列。
这里有一些链接可以帮助您:
你为什么需要那个? 作为一个整数,001与1相同。如果你想要的是显示或其他目的,创建另一列并在那里做你的工作(你可以在表上插入一个触发器的一部分,看起来在新插入的行中,并在列中适当地创建条目。
我有一个表,我存储一个整数,但用户希望看到它是XXX,即使它有零,所以我写了这个代码
declare @a int
set @a=1
select replicate('0',3-len(@a))+ cast(@a as varchar(4))
这是另一种方法:
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语句中指定列。
我需要将标识列增加为001,002,003等。
数据库显示它正在插入1,2,3等。
SQL数据库存储值,而不是您用于写入这些值的文字。 002
是 2.就像1 + 1
是 2.你期望SELECT 1 + 1
显示字符串“1 + 1”而不是2吗?
如果要将前导零存储在列中,则必须使用字符类型。 但是你不能使用AUTOINCREMENT
/ IDENTITY
。
您可能真正想要的是程序中的printf("%03d", number)
,它从数据库中读取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.