Click here to Skip to main content
15,887,027 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi,
i have transaction numbers like 'AA000','1B1234','D003'
I need to increment numbers by 1 like 'AA001','1B1235','D004'

What I have tried:

I tried right(n) and convert to int, it didnt work,number of numeric digits are not fixed
Posted
Updated 6-Oct-19 9:37am
Comments
Maciej Los 6-Oct-19 14:42pm    
Show us what you tried...

1 solution

One of the way is to use CTE[^]. See:

SQL
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 


For further details, please see: WITH common_table_expression (Transact-SQL) - SQL Server | Microsoft Docs[^]
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900