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

I이 29 그러나 단지 NULL의 값이 나는 사람이 도울 수있는이에 대한 간단한 explaination가 확신

을 반환 반환하는 기대?

+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 (* lastcharindex *가 없음)로 첫 번째 x를 얻고 원본 문자열의 끝에서 오프셋을 읽은 다음 -1을 건너 뛰십시오 x 자체. –

4

PARSENAME ('object_name' , object_piece)

'OBJECT_NAME' 지정된 객체의 일부를 검색 할 개체의 이름입니다. 이 이름에는 서버 이름, 데이터베이스 이름, 소유자 이름 및 개체 이름의 네 부분,이 포함될 수 있습니다.

4 개 이상을 제공하면 항상 null이 반환됩니다.

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

관련 문제