2012-02-15 13 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) 

私だけNULLが

を返されたが、私はこれまでの単純な、について説明があると確信している、これは29の値を返すことを期待する誰でも助けることができますか?

+1

あなたはどのようなRDBMSを使用していますか? – Dan

+1

SQL Server Management Studio 2008 – PhilC

答えて

10

PARSENAMEは、特にSQLオブジェクト名を解析するように設計されています。後者の例のピリオドの数は、コールが正しく失敗するように、そのような名前から除外されます。

代わり

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

リバースを追加し、-1は実際に何をしますか? – JsonStatham

+2

"1x2x3"最後のxを探して "3x2x1"の文字列を反転させ、charindexで最初のxを取得したい場合は(* lastcharindex *はありません)、元の文字列の最後からそのオフセットを読み、-1 x自体。 –

4

PARSENAME ('object_name' , object_piece)

'object_nameの' 指定されたオブジェクトの一部を取得するためのオブジェクトの名前です。 この名前には、サーバー名、データベース名、所有者名、およびオブジェクト名の4つの部分、を含めることができます。

4つ以上の部分を指定すると、常にnullが返されます。参考のために

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