Идентификатор SQL с ведущими дополненными нулями

я отметил столбец как идентификатор в моей таблице

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

мне нужно, чтобы столбец идентификаторов был увеличен как 001,002,003, etc.

база данных показывает, что она вставляется как 1,2,3, etc.

как это можно сделать?

7 ответов


если вы хотите показать свой number столбец с ведущими нулями, просто поместите его в свой SELECT заявление. Это число, оно не будет хранить с ведущими нулями как целое число.

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

на 3 - это количество символов, которое вы хотите получить на выходном дисплее.


как уже справедливо указывали другие-INT никогда не имеет ведущих нулей - он просто держит значение, вот и все (и это хорошо).

Если вам нужно дополнительное форматирование, вы всегда можете добавить вычисляемый столбец в свою таблицу, например:

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

таким образом, ваша идентичность INT будет использоваться как 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 который является числовым и автоматически увеличивается SQL Server, и вы можете определить формат отображения любым способом и иметь его в любое время.


Если вам требуется как автоматически увеличивающееся число (которое может быть только числом), так и алфавитное представление числа, вы можете рассмотреть возможность просмотра вычисляемых столбцов.

вот несколько ссылок для вас иду:


зачем вам это нужно? Как целое, 001 такой же как 1. Если вы хотите, чтобы для отображения или других целей, создайте другой столбец и выполните там свою работу (вы можете сделать это как часть триггера в таблице, на insert, который смотрит на недавно вставленную строку и создает запись в столбце соответствующим образом.


У меня есть таблица, где я храню целое число, но пользователи хотят видеть его 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 is 2. Прямо как 1 + 1 is 2. Вы ожидали бы SELECT 1 + 1 для отображения строки "1 + 1" вместо 2?

если вы хотите, чтобы ведущие нули хранились в вашем столбце, вы должны использовать тип характера. Но тогда вы не можете использовать AUTOINCREMENT/IDENTITY.

что вы, вероятно,действительно хочу что-то вроде printf("%03d", number) в программе, которая читает из базы данных.