sous-chaîne de longueur variable
J'ai une table avec une colonne qui contient des chaînes de caractères comme ci-dessous.
RTSPP_LZ_AEN
RTSPP_LZ_CPS
RTSPP_LZ_HOUSTON
RTSPP_LZ_LCRA
RTSPP_LZ_NORTH
RTSPP_LZ_RAYBN
RTSPP_LZ_SOUTH
RTSPP_LZ_WEST
RTSPP_BTE_CC1
RTSPP_BTE_PUN1
RTSPP_BTE_PUN2
J'ai besoin d'obtenir la sous-chaîne à partir de la deuxième occurrence de _
jusqu'à la fin de la chaîne et comme vous pouvez le voir la sous-chaîne n'est pas de longueur fixe. La première partie n'est pas toujours fixe, il peut changer. A partir de maintenant je suis en utilisant le code suivant pour l'atteindre.
SELECT SUBSTRING([String],CHARINDEX('_',[String],(CHARINDEX('_',[String])+1))+1,100)
FROM [Table]
Comme vous pouvez le voir, je suis prise d'un arbitraire de grande valeur comme la longueur à prendre soin de longueur variable. Est-il une meilleure façon de le faire?
Sera-t-il toujours être exactement 2 underscores?
Est la première partie toujours RTSPP_LZ_ ou pourrait avoir d'autres valeurs?
A partir de maintenant je n'ai pas rencontré un cas avec plus de 2 caractères de soulignement. Il pourrait se produire dans le futur, dans un tel cas, le dernier caractère de soulignement jusqu'à la fin de la chaîne. Un plus solution générique qui peut gérer la n-ième occurrence de trait de soulignement serait grandement apprécié
Pas toujours le cas, ils peuvent changer comme RTSPP_BTE_CC1 RTSPP_BTE_PUN1 RTSPP_BTE_PUN2
Est la première partie toujours RTSPP_LZ_ ou pourrait avoir d'autres valeurs?
A partir de maintenant je n'ai pas rencontré un cas avec plus de 2 caractères de soulignement. Il pourrait se produire dans le futur, dans un tel cas, le dernier caractère de soulignement jusqu'à la fin de la chaîne. Un plus solution générique qui peut gérer la n-ième occurrence de trait de soulignement serait grandement apprécié
Pas toujours le cas, ils peuvent changer comme RTSPP_BTE_CC1 RTSPP_BTE_PUN1 RTSPP_BTE_PUN2
OriginalL'auteur Ram | 2013-07-31
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
CHARINDEX
en combinaison avecINVERSE
fonction pour trouver la dernière occurrence de_
, et vous pouvez les utiliserDROIT
pour obtenir le nombre spécifié de caractères à partir de la fin de la chaîne.SQLFiddle DÉMO
OriginalL'auteur Nenad Zivkovic
Vous pouvez essayer de donner à len([string]) comme dernier argument :
OriginalL'auteur Sonam
Vous pouvez utiliser une expression de table commune pour faire le travail, comme le code ci-dessous. La donne de la flexibilité supplémentaire pour obtenir toutes les sous-chaînes n'importe comment beaucoup de traits de soulignement sont dans la chaîne.
OriginalL'auteur Dave Sexton
Ou, encore ceci:
OriginalL'auteur BWS