在SQL Server中以前导零格式增加最大值

时间:2019-11-08 21:31:54

标签: sql sql-server

增加包含前导零的最大值的最佳方法是什么?我有这个查询几乎完美地工作,只是它不保留前导零。我也不想编辑列的数据类型。

SELECT CONCAT(LEFT(MAX(UniqueID), 5), RIGHT(MAX(UniqueID), 4) + 1)
FROM animal 
WHERE UniqueID LIKE 'MU19M%';

这将返回:MU19M51,但必须为MU19M0051,这是将所有其他唯一ID写入列的方式。我想运行此查询,这样我就可以看到下一个ID是什么,而无需在表中插入任何内容进行质量控制。感谢您的建议。

2 个答案:

答案 0 :(得分:1)

但是,如果将此值用作新的键值,则应使用sequence而不是max(id)+1。 EG

create sequence MySequence start with 1 increment by 1
create table MyTable(Id varchar(20) default concat('MU19M', format( (next value for MySequence), 'D4')), a int)

insert into MyTable(a) values (1),(2)

select * from MyTable

输出:

Id                      a
--------------------    -----------
MU19M0001               1
MU19M0002               2

答案 1 :(得分:0)

格式为“ D4”的FORMAT应该执行以下操作:

SELECT 
  concat(
    left(max(UniqueID),5), 
    format(right(max(UniqueID),4)+1, 'D4')
  )
FROM animal 
WHERE UniqueID like 'MU19M%';

如果您的SQLserver没有FORMAT(格式太旧),则可以RIGHT(CONCAT('0000', number), 4)代替:

SELECT 
  concat(
    left(max(UniqueID),5), 
    right(
      concat('0000', right(max(UniqueID),4)+1), 
      4
    )
  )
FROM animal 
WHERE UniqueID like 'MU19M%';