J'ai commencé par cela, mais est-ce le meilleur moyen d'effectuer la tâche?Analyser une chaîne avant le dernier index d'un caractère dans SQL Server
select
reverse(
substring(reverse(some_field),
charindex('-', reverse(some_field)) + 1,
len(some_field) - charindex('-', reverse(some_field))))
from SomeTable
- Comment SQL Server traiter les appels multiples à
reverse(some_field)
? - Outre une UDF et itérer la chaîne à la recherche de
charindex
du « - » et le stockage du dernier indice de celui-ci, est-il plus moyen efficace d'effectuer cette tâche dans T-SQL?
Notez que ce que j'ai fonctionne, je me demande vraiment si c'est la meilleure façon de le faire.
Ci-dessous des exemples de valeurs pour some_field.
s2-st, s1-st, s3-st, s3-sss-zzz, s4-sss-zzzz
EDIT:
Exemple de sortie pour ce serait ...
s1, s2, s3-sss, s3, s4-sss
La Erike solution a écrit est réellement obtenir la fin de la chaîne, donc tout après le dernier tiret. Je viens de modifier sa version pour obtenir tout avant d'utiliser une méthode similaire avec la fonction left
. Merci pour votre aide.
select left(some_field, abs(charindex('-', reverse(some_field)) - len(some_field)))
from (select 's2-st' as some_field
union select 's1-st'
union select 's3-st'
union select 's3-sss-zzz'
union select 's4-sss-zzzz') as SomeTable
Cela se fait en SQL parce que c'est vraiment la seule option en raison d'un hack et quelqu'un paresseux (pas moi). On m'a demandé s'il y avait un moyen d'obtenir les valeurs pour eux, alors je leur ai fourni et je les ai mis en garde contre son utilisation. Je me suis toujours interrogé sur l'utilisation de fonctions telles que remplacer ou inverser dans les sélections quand ils sont sur les mêmes champs et comment cela fonctionne. J'ai pensé que c'était un bon exemple de problème que j'ai rencontré pour poser la question. Je suis d'accord que la méthode préférable serait de le faire dans le code client en quelque sorte. –
BTW - j'ai oublié de mentionner Je ne rencontre pas de problèmes de performances, mais souvent j'écris des requêtes qui fonctionnent sur des milliers de lignes et j'utilise des fonctions de chaînes pour renseigner les tables de reporting et curieux comment ça marche. Comme vous le savez, tout ce que je peux faire pour optimiser les performances des requêtes est toujours un plus. –