SQL pour find le premier caractère non numérique dans une string

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.

  1. Inverser la string
  2. Utilisez PATINDEX pour searchr la première occurrence d'un champ non numérique
  3. Utilisez la fonction GAUCHE pour returnner la partie numérique de la string

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