2013-06-14 2 views
1

Question pour tout le monde ... J'ai des valeurs que j'ai insérées dans une table lorsque j'essaie de jouer avec les fonctions de chaîne. Ce que je suis en train de faire est de supprimer la fin de la chaîne et garder tout avant qu'il:Obtenez une sous-chaîne tronquée dans SQL Server

CREATE TABLE #BrokerNameT 
    (
    BrokerName VARCHAR(100) 
) 

INSERT INTO #BrokerNameT 
      (BrokerName) 
VALUES  ('Peter Pan Co Cash'), 
      ('Batman Co Cash'), 
      ('Spiderman Algo'), 
      ('Spiderman Cash') 

Voici ce que je cherche à se retourner simplement: « Co Peter Pan », « Batman Co », et 'Spiderman'

Est-il possible de rechercher le premier espace à partir de la fin d'une chaîne? Si je pouvais faire ça, je ne pouvais pas tout garder avant le premier espace?

Une idée de comment j'irais faire ça? Pourrais-je utiliser deux inversions pour obtenir ceci?

Répondre

4

Inversez la chaîne, puis trouvez la position du premier espace, puis vous saurez à quelle distance se trouve la fin du dernier espace.

SELECT 
    SUBSTRING(
    BrokerName, 
    1, 
    LEN(BrokerName) - CHARINDEX(' ', REVERSE(BrokerName)) 
) 
FROM 
    #BrokerNameT 
+0

Yup. Sentez-vous stupide de ne pas y penser. –

+0

N'est-il pas stupide que SQL Server n'ait pas avancé pour faire quelque chose d'aussi simple que ceci et regex par exemple? – shahkalpesh

0

Voici une requête pour le faire:

select *, 
     left(BrokerName, len(BrokerName) - charindex(' ', reverse(BrokerName)) 
      ) as AllButLast 
from BrokerNameT 

Here est un SQLFiddle pour le démontrer.

Questions connexes