Идентификатор 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)
в программе, которая читает из базы данных.