J'ai hérité d'une table avec des identifiants dans un format [préfixenumumeric] [nombre]. Par exemple (ABC123, R2D2456778, etc). Je me demandais s'il y avait un bon moyen de scinder cela en deux champs, le plus grand entier formé du côté droit, et le préfixe, par exemple (ABC, 123, R2D, 2456778, etc). Je sais que je peux le faire avec un slider, un code C #, etc. – et je le ferai si je le dois – mais je ne me heurte pas à des choses que je ne peux pas faire rapidement et facilement en SQL, alors j'ai pensé ici.
Exemple de code
DECLARE @mySsortingng varchar(100); DECLARE @largestInt int; SET @mySsortingng = 'R2D2456778' SET @myssortingng = REVERSE(@mySsortingng); SET @largestInt = LEFT(@mySsortingng, PATINDEX('%[az]%', @mySsortingng) - 1) PRINT ( CONVERT(varchar(100), @largestInt) )
Vous pouvez utiliser PATINDEX
avec un model comme '%[^0123456789]%'
ou '%[^0-9]%'
pour find la position du premier caractère non numérique
Vous pourriez essayer quelque chose comme
DECLARE @Table TABLE( Val VARCHAR(50) ) INSERT INTO @Table SELECT 'ABC123' INSERT INTO @Table SELECT 'R2D2456778' SELECT *, LEFT(Val,LEN(Val) - (PATINDEX('%[^0-9]%',REVERSE(Val)) - 1)), RIGHT(Val,(PATINDEX('%[^0-9]%',REVERSE(Val)) - 1)) FROM @Table