Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL идентичност с водещи подплатени нули

Както другите вече правилно посочиха - 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 ИДЕНТИЧНОСТ, която е цифрова и автоматично се увеличава от SQL Server, и можете да дефинирате формат на показване по какъвто начин желаете и да го имате на разположение по всяко време.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирам пореден номер на ред в tsql?

  2. DATEDIFF() връща грешни резултати в SQL Server? Прочети това.

  3. Как да задам променлива от SQL заявка?

  4. DateTime2 срещу DateTime в SQL Server

  5. Изчислете спестяванията при компресиране на данни в SQL Server