2
votes

TSQL extrait une partie de chaîne avec regex

je créerais un script qui itérerait sur les enregistrements d'une table avec un curseur et extraire d'une valeur de colonne formatée comme celle-ci "yyy: // xx / bb / 147011" uniquement le numéro final 147011 et de mettre cette valeur dans une variable. Il est possible de faire quelque chose comme ça? Merci beaucoup.


0 commentaires

3 Réponses :


1
votes

Si la valeur numérique a une position exacte définie avec des exemples de données, vous pouvez faire:

SELECT t.*, SUBSTRING(t.col, PATINDEX('%[0-9]%', t.col), LEN(t.col))
FROM table t; 


0 commentaires

3
votes

Vous n'avez pas besoin d'un curseur pour cela. Vous pouvez simplement utiliser une requête. Ce qui suit obtient tout après le dernier / :

select right(str, charindex('/', reverse(str)) - 1 )
from (values ('yyy://xx/bb/147011')) v(str)

Il ne vérifie pas spécifiquement s'il s'agit d'un nombre, mais cela peut également être ajouté.


0 commentaires

1
votes

Vous pouvez également utiliser la requête ci-dessous.

SELECT RIGHT(RTRIM('yyy://xx/bb/147011'), 
CHARINDEX('/', REVERSE('/' + RTRIM('yyy://xx/bb/147011'))) - 1) AS LastWord


2 commentaires

pardonnez mon ignorance, mais pourquoi est-il nécessaire de RTRIM la chaîne?


@Giu Cela n'a pas d'impact majeur.