Увеличение максимального значения с помощью начального нулевого формата в SQL Server - PullRequest
0 голосов
/ 09 ноября 2019

Каков наилучший способ увеличить максимальное значение, которое будет содержать лидирующие нули? У меня есть этот запрос, который работает почти идеально, только то, что он не держит ведущие нули. Я также не хочу редактировать тип данных для столбца.

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

Возвращает: MU19M51, но должно быть MU19M0051, так как все остальные уникальные идентификаторы записываются в столбце. Я хочу выполнить этот запрос, чтобы увидеть, каким будет следующий идентификатор, не вставляя ничего в таблицу для контроля качества. Спасибо за ваши предложения.

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Но если вы используете это значение для нового ключевого значения, вам следует использовать последовательность вместо 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
0 голосов
/ 09 ноября 2019

FORMAT со строкой формата 'D4' должен сделать это:

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%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...