2012-02-15 67 views
6

我在SQL中使用Parsename并想提取项目列表中的最后一个元素。我正在使用下面的代码。使用PARSENAME查找列表中的最后一项

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

SELECT PARSENAME(@string, 1) 

这个工作,并返回值28,如我所料。但是,如果我将列表展开超过4个项目,则结果返回NULL。例如:

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

SELECT PARSENAME(@string2, 1) 

我希望这回29但只有NULL值返回

我敢肯定有一个简单的交代这个任何人都可以帮助吗?

+1

您使用的是什么RDBMS? – Dan 2012-02-15 16:08:44

+1

SQL Server Management Studio 2008 – PhilC 2012-02-15 16:10:13

回答

10

PARSENAME是专门为解析sql对象名称而设计的。后一个例子中的句点数量使它免于成为这样的名字,所以这个调用正确地失败了。

相反

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

添加reverse和-1)实际上做了什么? – JsonStatham 2012-02-15 16:14:07

+2

“1x2x3”,如果你想查找最后一个x的反转字符串为“3x2x1”,并获得charindex的第一个x(没有* lastcharindex *),然后从原始字符串的末尾读取偏移量,-1跳过x本身。 – 2012-02-15 16:15:50

4

PARSENAME ('object_name' , object_piece)

'OBJECT_NAME' 是对象要检索指定对象部分的名称。 该名称可以有四个部分:服务器名称,数据库名称,所有者名称和对象名称。

如果我们给4个以上的部分,它总会返回null。

参考:http://msdn.microsoft.com/en-us/library/ms188006.aspx