带有前导填充零的 SQL 标识

标签 sql sql-server padding identity-column

我已在表中将一列标记为“身份”

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

我需要将身份列递增为 001,002,003 等。

数据库显示它正在插入为 1,2,3 等。

如何做到这一点?

最佳答案

正如其他人已经正确指出的那样 - 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 自动增加),并且您可以以您喜欢的任何方式定义显示格式并随时可用。

关于带有前导填充零的 SQL 标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3429284/

相关文章:

xaml - 如何调整XAML标签中的填充

android - Android布局中的填充颜色

sql - SQL Server 中 2 个表的公共(public)记录

sql - 不是单组组函数(00937.00000)

sql-server - sql server认为空字符串等于一些字符

sql-server - 在 T-SQL 中指定给定日期的正确方法

sql - 使用不同的 where 条件更新多条记录

Android 在运行时更改谷歌地图填充

sql - 使用 Groovy 批处理异构 SQL 准备语句?

sql - 可以使用 SQL 将报告分组在一起吗?