Я отметил столбец как Идентификационные данные в моей таблице
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
Мне нужен столбец идентификационных данных, который будет увеличен как 001,002,003
, и т.д.
База данных показывает, что вставляет как 1,2,3
, и т.д.
Как это может быть сделано?
Если вы хотите отобразить столбец номер
с ведущими нулями, просто добавьте его в свой оператор SELECT
. Это число, оно НЕ будет храниться с ведущими нулями как целое число.
SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest
3
- это общее количество символов, которое вы хотите отобразить на экране вывода.
Мне нужно, чтобы столбец идентификаторов увеличивается на 001 002 003 и т. д.
База данных показывает, что это вставка 1,2,3 и т. д.
В базах данных SQL хранятся значения, а не литералы, которые вы использовали для записи этих значений. 002
равно 2. Также как 1 + 1
равно 2. Ожидаете ли вы, что SELECT 1 + 1
отобразит строку «1 + 1 "вместо 2?
Если вы хотите, чтобы в столбце хранились ведущие нули, вы должны использовать символьный тип. Но тогда вы не можете использовать AUTOINCREMENT
/ IDENTITY
.
То, что вам, вероятно, на самом деле , - это что-то вроде printf ("% 03d", number)
в программе, которая читает из базы данных.
Как и другие уже справедливо указали - 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, и вы можете определять формат отображения любым удобным вам способом и иметь его доступным в любое время.
Если вам требуется как автоматически увеличивающееся число (которое может быть только числом), так и буквенное представление числа, вы можете рассмотреть возможность использования вычисляемых столбцов.
Вот несколько ссылок, которые помогут вам начать:
Зачем это вам? В качестве целого числа 001 совпадает с 1. Если вы хотите, чтобы это было для отображения или других целей, создайте другой столбец и выполняйте свою работу там (вы можете сделать это как часть триггера в таблице при вставке, которая выглядит во вновь вставленной строке и соответствующим образом создает запись в столбце.
У меня есть таблица, в которой я храню целое число, но пользователи хотят видеть его XXX, даже если в нем есть нули, поэтому я написал этот код
declare @a int
set @a=1
select replicate('0',3-len(@a))+ cast(@a as varchar(4))