如何在SQL Server 2012中按顺序添加前导零?

时间:2016-04-01 14:49:04

标签: sql sql-server sql-server-2012 sequence

我的表格中有一列,即TieBreaker只接受4位长度值。

我编写了一个SQL SEQUENCE来生成一个Series:

/ *要删除现有序列的片段* /

IF EXISTS 
    (
       SELECT * FROM Sys.Sequences WHERE Name = 'TieBreaker'
    )   DROP SEQUENCE TieBreaker
GO

/ * Snippet to CREATE Sequence * /

CREATE SEQUENCE TieBreaker AS INT
 START WITH 0000
 INCREMENT BY 1
 MINVALUE 0000
 MAXVALUE 9999
 CYCLE
 GO

如何为我的序列输出前导0?如下:

enter image description here

3 个答案:

答案 0 :(得分:2)

使用计算列进行格式化的示例

CREATE TABLE Test (
  TieBreakerSeq INT DEFAULT NEXT VALUE FOR TieBreaker,
  TieBreakerAsChar AS FORMAT(TieBreakerSeq, '0000#'),
  SomeOtherData VARCHAR(10)
)

INSERT INTO Test (SomeOtherData) VALUES ('A'),('B'),('C')

SELECT * FROM Test

TieBreakerSeq TieBreakerAsChar SomeOtherData
------------- ---------------- -------------
0             00000            A
1             00001            B
2             00002            C

答案 1 :(得分:1)

你没有。正如我们在学校所学到的那样,一个数字没有前导零。

字符格式有。所以你有3个选择:

  • 将字段设为varchar。这并非完全关闭,因为许多数字序列也有前缀而且不是数字。

  • 添加另一个格式化输出的计算字段,以便您可以使用它。

  • 不关心数据库级别,而是在任何程序使用它的格式。

答案 2 :(得分:0)

您尝试过

select lpad(TieBreaker.nextval,'4','0') from dual;

它会给出正确的结果吗?

0000
0001
0002 and so on..