Идентификационные данные SQL с продвижением заполненных нулей

Я отметил столбец как Идентификационные данные в моей таблице

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

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

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

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

8
задан kbrimington 7 August 2010 в 07:02
поделиться

6 ответов

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

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

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

6
ответ дан 5 December 2019 в 05:54
поделиться

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

База данных показывает, что это вставка 1,2,3 и т. д.

В базах данных SQL хранятся значения, а не литералы, которые вы использовали для записи этих значений. 002 равно 2. Также как 1 + 1 равно 2. Ожидаете ли вы, что SELECT 1 + 1 отобразит строку «1 + 1 "вместо 2?

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

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

0
ответ дан 5 December 2019 в 05:54
поделиться

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

15
ответ дан 5 December 2019 в 05:54
поделиться

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

Вот несколько ссылок, которые помогут вам начать:

3
ответ дан 5 December 2019 в 05:54
поделиться

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

2
ответ дан 5 December 2019 в 05:54
поделиться

У меня есть таблица, в которой я храню целое число, но пользователи хотят видеть его XXX, даже если в нем есть нули, поэтому я написал этот код

declare @a int
set @a=1


select replicate('0',3-len(@a))+ cast(@a as varchar(4))
1
ответ дан 5 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: