2012-02-15 35 views
6

Estoy usando Parsename en SQL y me gustaría extraer el último elemento en una lista de elementos. Estoy usando el siguiente código.usando PARSENAME para buscar el último elemento en una lista

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

SELECT PARSENAME(@string, 1) 

Esto funciona y devuelve el valor 28 como esperaba. Sin embargo, si amplío mi lista más allá de 4 elementos, el resultado arroja un NULL. Por ejemplo:

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

SELECT PARSENAME(@string2, 1) 

Yo esperaría que esto devuelve un valor de 29 sin embargo, sólo se devuelve NULL

Estoy seguro de que es un simple explicación de esto puede ayudar a alguien?

+1

Lo RDBMS está usando? – Dan

+1

SQL Server Management Studio 2008 – PhilC

Respuesta

10

PARSENAME está diseñado específicamente para analizar un nombre de objeto sql. El número de períodos en el último ejemplo lo exime de ser un nombre así que la llamada falla correctamente.

lugar

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

¿Qué significa agregar el inverso y el -1) en realidad? – JsonStatham

+2

"1x2x3" si quiere encontrar la última x invierta la secuencia a "3x2x1" y obtenga la primera x con charindex (no hay * lastcharindex *) luego lea esa compensación desde el final de la cadena original, -1 para saltear la x misma. –

4

PARSENAME ('object_name' , object_piece)

'object_name' es el nombre del objeto para el que se debe recuperar la parte del objeto especificado. Este nombre puede tener cuatro partes: el nombre del servidor, el nombre de la base de datos, el nombre del propietario y el nombre del objeto.

Si proporcionamos más de 4 partes, siempre devolverá nulo.

Para Ref: http://msdn.microsoft.com/en-us/library/ms188006.aspx

Cuestiones relacionadas