Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带前导填充零的SQL标识_Sql_Sql Server_Padding_Identity Column - Fatal编程技术网

带前导填充零的SQL标识

带前导填充零的SQL标识,sql,sql-server,padding,identity-column,Sql,Sql Server,Padding,Identity Column,我已在表中将一列标记为标识 create table Identitytest( number int identity(1,001) not null, value varchar(500) ) 我需要将标识列增加为001002003,等等 数据库显示它以1,2,3等形式插入 如何做到这一点?您为什么需要它?作为一个整数,001与1相同。如果您想要的是用于显示或其他目的,请创建另一列并在其中执行您的工作(您可以在insert时将其作为表上触发器的一部分来执行,该触发器查看新

我已在表中将一列标记为标识

create table Identitytest(
    number int  identity(1,001) not null,
    value varchar(500)
)
我需要将标识列增加为
001002003
,等等

数据库显示它以
1,2,3
等形式插入


如何做到这一点?

您为什么需要它?作为一个整数,001与1相同。如果您想要的是用于显示或其他目的,请创建另一列并在其中执行您的工作(您可以在insert时将其作为表上触发器的一部分来执行,该触发器查看新插入的行,并在列中适当地创建条目。

如果您想用前导零显示您的
number
列,只需将其填入
SELECT
语句中即可。它是一个数字,不会以前导零作为整数存储

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

<代码> 3 是输出显示中想要的字符总数。

< P>如果您需要自动递增数(它只能是一个数字)和数字的字母表示,您可以考虑查看计算列。

这里有几个链接可以帮助您继续:


正如其他人已经正确指出的那样,INT永远不会有前导零,它只保存值,仅此而已(这样很好)

如果需要一些额外的格式,您可以始终向表中添加一个计算列,例如:

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber AS  RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED
这样,您的INT标识将被用作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、…
等等

您可以充分利用这两个方面的优势—保留由SQL Server自动增加的整数标识,并且可以以任何方式定义显示格式,并随时提供该格式

我需要标识栏被删除 增加为001002003等

数据库显示它是 插入为1、2、3等

SQL数据库存储值,而不是您用来写入这些值的文本。
002
是2。就像
1+1
是2一样。您希望
选择1+1
显示字符串“1+1”而不是2吗

如果要在列中存储前导零,则必须使用字符类型。但不能使用
AUTOINCREMENT
/
IDENTITY


您可能真正想要的是从数据库读取的程序中类似于
printf(“%03d”,number)

我有一个存储整数的表,但用户希望看到它是XXX,即使它有零,所以我写了这段代码

declare @a int
set @a=1


select replicate('0',3-len(@a))+ cast(@a as varchar(4))

以下是另一种方法:

create table TEST_T (ui int NOT NULL identity, name varchar(10))
insert into TEST_T values ( 'FRED' )
select NAME, ui, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_T from TEST_T
go
/* NOTE: A view could be created with a calculated column instead of the identity column. */
create view TEST_V as select NAME, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_V from TEST_T go
go
select * from TEST_V
drop view TEST_V
drop table TEST_T

没有那么多的数据重复(?)将列添加到表中,无需在select语句中指定列。

没错。这是格式化输出的问题。这是我在过去两天中看到的第二个问题。对于程序员来说,不理解001与1是相同的只是吓人。另一个人想在DateTim中存储日期不带毫秒的数据类型,以便在使用.ToString()时不会显示.Sheesh.+1.这绝对是一个显示问题,而不是存储问题。@Ranjana:客户端应该负责填充。为什么要存储这个?您可以在表上创建一个视图,该视图具有适当的填充整数的逻辑,然后引用该视图并完成操作。+1.我认为演示如何获取显示更有用谢谢你的回复,但我需要把它以001格式存储在数据库中,而不是1,2…@Ranjana:为什么需要存储?谁在消费这个不能利用一点铸造和格式化的东西?你不是说
|
而不是
+
?为什么这会得到投票我知道你可能不在乎,但我为我之前的评论道歉,并将删除它们(除了我感到沮丧之前的第一条).我不符合要求,我很抱歉。stackoverflow上已经回答了这个问题:它只能工作到999年,之后,如果你有1000个数字,那么结果是000,1001导致001