Obtenir une sous-string de longueur indéterminée, commençant à la fin de la string

J'ai une série de numéros de pièces qui ne sont habituellement que de 10 caractères, mais qui contiennent parfois un supplément de 2 ou 3 au début. Je veux une list distincte de toutes ces parties en excluant les 5 derniers caractères qui contiennent uniquement des informations de taille. Évidemment, une sous-string simple ne fonctionne pas et pour autant que je sache, il n'y a pas de rsortingm () qui permette la spécification des plages de caractères. J'ai posté ma solution ci-dessous, mais je pense que c'est un peu bâkey et je voulais savoir s'il y avait un meilleur moyen?

SELECT DISTINCT REVERSE(SUBSTRING(REVERSE(P.ID),6,LEN(P.ID))), P.DESCRIPTION FROM REQUIREMENT R INNER JOIN OPERATION O ON R.WORKORDER_BASE_ID = O.WORKORDER_BASE_ID AND R.WORKORDER_LOT_ID = O.WORKORDER_LOT_ID AND R.WORKORDER_SUB_ID = O.WORKORDER_SUB_ID INNER JOIN PART P ON P.ID = R.PART_ID WHERE O.RESOURCE_ID LIKE '%17%' AND P.ID LIKE '%[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9]' AND P.DESCRIPTION NOT LIKE '%OBS%' AND O.STATUS_EFF_DATE > GETDATE() - 365*2 

La façon dont vous avez formulé cela, c'est que vous voulez supprimer les cinq derniers caractères. Il y a deux façons de faire ça. Un, il suffit de retirer tous sauf les cinq derniers caractères, et l'autre est d'utiliser REVERSE, retirer les 5 premiers, et inverser à nouveau. Vous avez fait ce dernier dans votre exemple, mais c'est l'autre alternative:

 SELECT SUBSTRING(@ssortingng, 1, LEN(@ssortingng) - 5) 

N'est-ce pas ce que tu veux?