Selcuk Fr Ответов: 1

Как увеличить число в строках (SQL 2012)


привет,
у меня есть номера транзакций типа "AA000", "1B1234", "D003"
Мне нужно увеличить числа на 1, например 'AA001','1B1235','D004'

Что я уже пробовал:

Я попробовал right(n) и преобразовать в int, это не сработало,количество числовых цифр не фиксировано

Maciej Los

Покажи нам, что ты пробовал...

1 Ответов

Рейтинг:
2

Maciej Los

Один из способов заключается в использовании КТОС[^]. Видеть:

DECLARE @tmp TABLE(AutoIncStringNumber VARCHAR(50))

INSERT INTO @tmp (AutoIncStringNumber)
VALUES('AA000'), ('1B1234') , ('D003')

;WITH CTE AS
(
	SELECT LEFT(AutoIncStringNumber, 2) AS Prefix, RIGHT(AutoIncStringNumber, LEN(AutoIncStringNumber) - 2) AS OldNumber,
		CONVERT(INT, RIGHT(AutoIncStringNumber, LEN(AutoIncStringNumber) -2)) +1 AS NewNumber
	FROM @tmp
	WHERE PATINDEX('%[A-Z][0-9]%', AutoIncStringNumber)=2
	UNION ALL 
	SELECT LEFT(AutoIncStringNumber, 1) AS Prefix, RIGHT(AutoIncStringNumber, LEN(AutoIncStringNumber) - 1) AS OldNumber,
		CONVERT(INT, RIGHT(AutoIncStringNumber, LEN(AutoIncStringNumber) -1)) +1 AS NewNumber
	FROM @tmp
	WHERE PATINDEX('%[A-Z][0-9]%', AutoIncStringNumber)=1

)
SELECT CONCAT(Prefix, LEFT(OldNumber, LEN(OldNumber)-LEN(NewNUmber)), NewNumber) AS NewValue
FROM CTE 


Для получения более подробной информации, пожалуйста, смотрите: With обобщенное_табличное_выражение (Transact-SQL) при SQL-сервера Майкрософт документы[^]