Я хочу создать новый идентификатор на основе предыдущего идентификатора в хранимой процедуре SQL - PullRequest
0 голосов
/ 20 мая 2019

У меня есть одна таблица, которая будет храниться qno как 'res / 12-19 / 001'.

Я хочу увеличить его на 1, но когда я увеличу его на 1, новое qno будет res / 12-19 / 2.

Я хочу, чтобы это было res / 12-19 / 002.

Я использую следующие операторы в хранимой процедуре SQL: -

Select top (1) @OriginalQNo=QNO from Quo order by QNO desc

SET @NewQNo=RIGHT(@OriginalQNo, 3) + 1

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Чтобы решить вашу проблему, как описано в вашем вопросе, рассмотрите следующее:

DECLARE @NewQNo         VARCHAR(20)
DECLARE @OriginalQNo    VARCHAR(20)
SET @OriginalQNo = 'res/12-19/001'

SET @NewQNo = RIGHT('00' + CAST(RIGHT(@OriginalQNo, 3) + 1 AS VARCHAR), 3)
SET @NewQNo = LEFT(@OriginalQNo, LEN(@OriginalQNo) - 3) + @NewQNo

PRINT @NewQNo

Чтобы отформатировать число как трехзначное с конечными нулями, вы просто добавляете два ноля в виде строкидо начала номера и затем извлеките самые правые три цифры, которые в этом случае будут выдавать 002.

Для того, чтобы также включить остальную часть синтаксиса вопроса, вторая строка SETдобавляет начальные символы вопроса (в данном случае res/12-19/ к завершенной трехзначной строке.

Выходные данные:

res/12-19/002
0 голосов
/ 20 мая 2019

Предположим, что вы используете SQL Server 2017

Попробуйте это:

DECLARE @OriginalQNo VARCHAR(MAX) = 'res/12-19/001';

SELECT STRING_AGG(K.NewValue, '/')
FROM
(
    SELECT K.value,
           K.RN,
           CASE RN
               WHEN 3 THEN
                   RIGHT(REPLICATE('0', 3) + CAST(K.value + 1 AS VARCHAR(3)), 3)
               ELSE
                   K.value
           END AS NewValue
    FROM
    (
        SELECT value,
               ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN
        FROM STRING_SPLIT(@OriginalQNo, '/')
    ) AS K
) AS K;

Подробнее о STRING_SPLIT , REPLICATE , STRING_AGG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...