我已在表中将一列标记为身份
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
我需要将标识列递增为001,002,003
等。
数据库显示它正在插入 as1,2,3
等。
如何才能做到这一点?
我已在表中将一列标记为身份
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
我需要将标识列递增为001,002,003
等。
数据库显示它正在插入 as1,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)
从数据库读取的程序中的内容。