2012-02-15 38 views
6

Tôi đang sử dụng Parsename trong SQL và muốn trích xuất phần tử cuối cùng trong danh sách các mục. Tôi đang sử dụng mã sau đây.sử dụng PARSENAME để tìm mục cuối cùng trong danh sách

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

SELECT PARSENAME(@string, 1) 

Làm việc này và trả về giá trị 28 như tôi mong đợi. Tuy nhiên nếu tôi mở rộng danh sách của tôi qua hơn 4 mục thì kết quả trả về một NULL. Ví dụ:

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

SELECT PARSENAME(@string2, 1) 

Tôi mong chờ này để trả lại một giá trị của 29 tuy nhiên chỉ được trả về NULL

tôi chắc chắn rằng có một Giải thích đơn giản này ai cũng có thể giúp đỡ?

+1

Bạn đang sử dụng RDBMS nào? – Dan

+1

SQL Server Management Studio 2008 – PhilC

Trả lời

10

PARSENAME được thiết kế đặc biệt để phân tích cú pháp tên đối tượng sql. Số lượng các khoảng thời gian trong ví dụ sau đã miễn trừ nó khỏi tên như vậy để cuộc gọi không chính xác.

Thay vào đó

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

Việc thêm ngược lại và -1) thực sự làm gì? – JsonStatham

+2

"1x2x3" nếu bạn muốn tìm x cuối cùng xâu chuỗi thành "3x2x1" và nhận x đầu tiên với charindex (không có * lastcharindex *) rồi đọc phần bù đó từ cuối chuỗi gốc, -1 để bỏ qua chính x. –

4

PARSENAME ('object_name' , object_piece)

'object_name' Là tên của đối tượng mà để lấy một phần đối tượng quy định. Tên này có thể có bốn phần: tên máy chủ, tên cơ sở dữ liệu, tên chủ sở hữu và tên đối tượng.

Nếu chúng tôi cung cấp nhiều hơn 4 phần, nó sẽ luôn trả về giá trị rỗng.

Đối với tham chiếu: http://msdn.microsoft.com/en-us/library/ms188006.aspx

Các vấn đề liên quan