增加包含前导零的最大值的最佳方法是什么?我有这个查询几乎完美地工作,只是它不保留前导零。我也不想编辑列的数据类型。
SELECT CONCAT(LEFT(MAX(UniqueID), 5), RIGHT(MAX(UniqueID), 4) + 1)
FROM animal
WHERE UniqueID LIKE 'MU19M%';
这将返回:MU19M51
,但必须为MU19M0051
,这是将所有其他唯一ID写入列的方式。我想运行此查询,这样我就可以看到下一个ID是什么,而无需在表中插入任何内容进行质量控制。感谢您的建议。
答案 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%';