sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-identitet med inledande vadderade nollor

Som de andra redan med rätta påpekat - ett INT har aldrig inledande nollor - det håller bara värdet, det är allt (och det är bra så).

Om du behöver ytterligare formatering kan du alltid lägga till en beräknad kolumn i tabellen, något som:

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

På så sätt kommer din INT IDENTITY att användas som en INT och innehåller alltid det numeriska värdet, medan DisplayNumber innehåller 001, 002, ... 014, 015, ..... och så vidare - automagiskt, alltid uppdaterad.

Eftersom det är ett beständigt fält är det nu en del av din tabell, och du kan fråga efter det och till och med sätta ett index på det för att göra frågorna snabbare:

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

Och naturligtvis kan du använda nästan vilken formatering som helst i definitionen av din beräknade kolumn, så du kan också lägga till ett prefix eller något:

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

Så i det här fallet, ditt DisplayNumber skulle vara ABC-001, ABC-002, ... och så vidare.

Du får det bästa av två världar - du behåller din INT IDENTITY som är numerisk och automatiskt ökad av SQL Server, och du kan definiera ett visningsformat som du vill och ha det tillgängligt när som helst.



  1. MYSQL close connect kan inte stoppa infogningsaktiviteten

  2. MySQL-fråga misslyckas på grund av reserverat sökord?

  3. Optimera MySQL-frågor med många LEFT JOINs och GROUP BY

  4. Ett bärbart sätt att tillhandahålla en IP-baserad nedkylningsperiod?