2012-06-13 15 views
22

ho ricevuto la seguente voce nel mio database:Ottenere tutto dopo e prima determinato carattere in SQL Server

images/test.jpg 

voglio tagliare l'ingresso in modo da ottenere: test

Quindi, fondamentalmente, voglio tutto dopo / e prima .

Come posso risolverlo?

+5

v'è alcuna ragione specifica per non farlo nella lingua del client (cioè .NET, Java, PHP o qualsiasi altra cosa ...)? –

+4

Sì. Se non fosse non farei la domanda. – ffffff01

+2

E saresti così gentile da condividerlo con noi? I database servono per memorizzare i dati, non per visualizzarli in un formato particolare. La tua domanda può o non può essere indicativa di un problema più profondo, e per noi essere in grado di giudicare ciò, abbiamo bisogno di una ragione. –

risposta

27

Se si desidera ottenere questo fuori dalla tabella utilizzando SQL, dare un'occhiata alle seguenti funzioni che ti aiuteranno: SUBSTRING e CHARINDEX. È possibile utilizzare quelli per tagliare le voci.

Una possibile query simile a questa (dove col è il nome della colonna che contiene le directory di immagini:.

SELECT SUBSTRING(col, LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) + 1, LEN(col) - LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) - LEN(SUBSTRING(col, CHARINDEX ('.', col), LEN(col)))); 

un po 'di una brutta bestia Dipende anche il formato standard di 'dir/name.ext'

Edit:.
Questo (ispirato praveen) è più generico e si occupa di estensioni di diversa lunghezza:

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('/', col))) + 1, LEN(col) - LEN(LEFT(col, CHARINDEX ('/', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('.', col))) - 1); 
+0

La query tuttavia non funzionerà se nella colonna sono inserite estensioni diverse (.jpeg, png, jpg). Tuttavia, meno funziona perfettamente con i dati di esempio dell'OP – praveen

+0

@praveen: funziona su estensioni di diversa lunghezza, a patto che inizino con un punto. – Josien

+0

Considera un input come 'images/test.jpeg. La tua query sql recupera est come risultato – praveen

4
declare @T table 
    (
    Col varchar(20) 
) 



    insert into @T 
    Select 'images/test1.jpg' 
    union all 
    Select 'images/test2.png' 
    union all 
    Select 'images/test3.jpg' 
    union all 
    Select 'images/test4.jpeg' 
    union all 
    Select 'images/test5.jpeg' 

Select substring(LEFT(Col,charindex('.',Col)-1),charindex('/',Col)+1,len(LEFT(Col,charindex('.',Col)-1))-1) 
from @T 
15

utilizzare la seguente funzione

left(@test, charindex('/', @test) - 2) 
+5

Intendevi '-1' rispetto a' -2'? – JammyDodger231

2

ho appena fatto questo in uno dei miei rapporti ed era molto semplice.

Prova questo:

= MID (! Campi .Value, 8,4)

Nota: Questo ha funzionato per me, perché il valore stavo cercando di ottenere è stata una costante non sono sicuro che ciò che sei cercare di ottenere è una costante pure.

+0

'MID()' non è una funzione TSQL. Stai presumibilmente pensando al dialetto Visual BASIC disponibile in Generatore di rapporti, ma non è questo il motivo. –

1

ho fatto un metodo che è molto più generale:

così:

DECLARE @a NVARCHAR(MAX)='images/test.jpg'; 


--Touch here 
DECLARE @keysValueToSearch NVARCHAR(4000) = '/' 
DECLARE @untilThisCharAppears NVARCHAR(4000) = '.' 
DECLARE @keysValueToSearchPattern NVARCHAR(4000) = '%' + @keysValueToSearch + '%' 


--Nothing to touch here  
SELECT SUBSTRING(
      @a, 
      PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch), 
      CHARINDEX(
       @untilThisCharAppears, 
       @a, 
       PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch) 
      ) -(PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch)) 
     ) 
8

Prima

SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('/',ParentBGBU,0)) FROM dbo.tblHCMMaster; 

Dopo

SELECT SUBSTRING(ParentBGBU,CHARINDEX('-',ParentBGBU)+1,LEN(ParentBGBU)) FROM dbo.tblHCMMaster 
0

So che questo è stato un mentre .. ma ecco un io dea

declare @test varchar(25) = 'images/test.jpg' 

select 
@test as column_name 
, parsename(replace(@test,'/','.'),1) as jpg 
,parsename(replace(@test,'/','.'),2) as test 
    ,parsename(replace(@test,'/','.'),3) as images 
0

seguito query che si dà dei dati prima '-' Ex- W12345A-4S

SELEZIONA SOTTOSTRINGA (column_name, 0, CHARINDEX ('-', column_name)) come 'new_name' da [ abc].

uscita - W12345A

Problemi correlati