2012-02-15 2 views
6

Sto usando Parsename in SQL e vorrei estrarre l'ultimo elemento in un elenco di elementi. Sto usando il seguente codice.utilizzando PARSENAME per trovare l'ultimo elemento in un elenco

Declare @string as varchar(1000) 
set @string = '25.26.27.28' 

SELECT PARSENAME(@string, 1) 

Questo funziona e restituisce il valore 28 come previsto. Tuttavia, se espongo la mia lista oltre più di 4 elementi, il risultato restituisce un valore NULL. Per esempio:

Declare @string2 as varchar(1000) 
set @string2 = '25.26.27.28.29' 

SELECT PARSENAME(@string2, 1) 

mi aspetterei questo per restituire un valore di 29 ma solo NULL viene restituito

Sono sicuro che ci sia una semplice spiegazione per questo chiunque può aiutare?

+1

Cosa RDBMS stai usando? – Dan

+1

SQL Server Management Studio 2008 – PhilC

risposta

10

PARSENAME è progettato specificamente per analizzare un nome di oggetto sql. Il numero di periodi nel secondo esempio lo esclude dall'essere un tale nome, quindi la chiamata ha esito negativo.

Invece

select right(@string2, charindex('.', reverse(@string2), 1) - 1) 
+0

Cosa fa effettivamente l'inverso e il -1) effettivamente? – JsonStatham

+2

"1x2x3" se si desidera trovare l'ultima x rovesciare la stringa in "3x2x1" e ottenere la prima x con charindex (non c'è * lastcharindex *), quindi leggere l'offset dalla fine della stringa originale, -1 per saltare la x stessa. –

4

PARSENAME ('object_name' , object_piece)

'object_name' è il nome dell'oggetto per il quale recuperare la parte oggetto specificato. Questo nome può avere quattro parti: il nome del server, il nome del database, il nome del proprietario e il nome dell'oggetto.

Se forniamo più di 4 parti, restituirà sempre null.

Per Rif: http://msdn.microsoft.com/en-us/library/ms188006.aspx