2012-02-15 59 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