J'ai reçu la tâche d'afficher des chaînes qui ressemblent à Foo - Bar, Foo-Bar Foo - Bar, Foo!.,-Bar, Foo...-Bar et je dois l'afficher sous la forme {{ X5}} uniquement. Cela signifie que je dois supprimer tous les caractères après le symbole - et tous les caractères spéciaux avant. Existe-t-il une fonction simple que je peux utiliser qui peut gérer toutes les instances de chaîne que j'ai données dans la sortie souhaitée: Foo? Nous utilisons SQL Server 2008 r2.

EDIT: Je dois mentionner que les mots Foo et Bar ne sont qu'une représentation des chaînes réelles, donc le codage en dur de la longueur de la chaîne ne fonctionnera pas.

0
super-user 25 janv. 2017 à 08:57

4 réponses

Meilleure réponse

Je suis venu avec ceci (merci à John Cappelletti pour fournir des exemples de données, Veuillez le faire vous-même sur vos futures questions):

Declare @YourTable table (col varchar(50))
Insert into @YourTable values
 ('Foo - Bar')
,('Foo-Bar')
,('Foo        - Bar')
,('Foo!.,-Bar')
,('Foo...-Bar')
,('aaa Foo - Bar aaa')

La requête:

SELECT  col, 
        LEFT(BeforeDash, LEN(BeforeDash) - PATINDEX('%[a-z]%', REVERSE(BeforeDash))+1)
FROM     
(
    SELECT col, LEFT(col, CHARINDEX('-', col)) As BeforeDash
    FROM @YourTable
) derived

Résultats:

col                     Display
Foo - Bar               Foo
Foo-Bar                 Foo
Foo        - Bar        Foo
Foo!.,-Bar              Foo
Foo...-Bar              Foo
aaa Foo - Bar aaa       aaa Foo
1
Zohar Peled 25 janv. 2017 à 08:15
Declare @YourTable table (col varchar(50))
Insert into @YourTable values
 ('Foo - Bar')
,('Foo-Bar')
,('Foo        - Bar')
,('Foo!.,-Bar')
,('Foo...-Bar')
,('aaa Foo-Bar aaa')
,('There is no Bar-Foo here')

Declare @Search varchar(50) = 'Foo - Bar'
Select *
      ,Display = case when col like '%'+Replace(@Search,' ','%')+'%' 
                      then Left(@Search,charindex('-',@Search)-1)
                      else col 
                 end
 From  @YourTable 

Retour

col                         Display
Foo - Bar                   Foo 
Foo-Bar                     Foo 
Foo        - Bar            Foo 
Foo!.,-Bar                  Foo 
Foo...-Bar                  Foo 
aaa Foo-Bar aaa             Foo 
There is no Bar-Foo here    There is no Bar-Foo here
0
John Cappelletti 25 janv. 2017 à 15:32

Essaye ça

   declare @String varchar(20)='Foo!.,-Bar'
   select substring(@String,charindex('F', @String),3)
1
Thangadurai.B 25 janv. 2017 à 06:04
   DECLARE @STRING VARCHAR(2000)
SET @STRING = 'FOO - DEPTH'


SELECT LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(SUBSTRING(@STRING, 0, CHARINDEX('-', @STRING)),'!',''),'.',''),',','')))
-1
ps_prakash02 25 janv. 2017 à 06:40