2012-02-15 8 views
6

मैं SQL में पार्सनाम का उपयोग कर रहा हूं और आइटम की सूची में अंतिम तत्व निकालना चाहता हूं। मैं निम्नलिखित कोड का उपयोग कर रहा हूँ।किसी सूची में अंतिम आइटम ढूंढने के लिए PARSENAME का उपयोग कर

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

SELECT PARSENAME(@string, 1) 

यह काम करता है और जैसा कि मैं उम्मीद करता हूं वैल्यू 28 देता है। हालांकि अगर मैं 4 से अधिक वस्तुओं में अपनी सूची का विस्तार करता हूं तो परिणाम एक पूर्ण लौटाता है। उदाहरण के लिए:

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

SELECT PARSENAME(@string2, 1) 

मैं इस 29 तथापि केवल शून्य के एक मूल्य

दिया जाता है मुझे यकीन है कि इस के लिए एक सरल explaination किसी को भी मदद कर सकते हैं नहीं है कर रहा हूँ वापस करने के लिए उम्मीद करेंगे?

+1

क्या RDBMS प्रयोग कर रहे हैं? – Dan

+1

एसक्यूएल सर्वर प्रबंधन स्टूडियो 2008 – PhilC

उत्तर

10

PARSENAME विशेष रूप से एक एसक्यूएल ऑब्जेक्ट नाम को पार्स करने के लिए डिज़ाइन किया गया है। बाद के उदाहरण में अवधि की संख्या इसे इस तरह के नाम से मुक्त कर देती है ताकि कॉल सही ढंग से विफल हो।

इसके बजाय

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

रिवर्स और -1 जोड़ना क्या वास्तव में करता है? – JsonStatham

+2

"1x2x3" यदि आप अंतिम एक्स को स्ट्रिंग को "3x2x1" में ले जाना चाहते हैं और पहले x को charindex के साथ प्राप्त करें (कोई * lastcharindex * नहीं है) तो मूल स्ट्रिंग के अंत से ऑफसेट को पढ़ें, -1 छोड़ने के लिए एक्स स्वयं –

4

PARSENAME ('object_name' , object_piece)

'OBJECT_NAME' जिसके लिए निर्दिष्ट वस्तु हिस्सा पुनः प्राप्त करने के ऑब्जेक्ट का नाम है। इस नाम में चार भाग हो सकते हैं: सर्वर का नाम, डेटाबेस का नाम, मालिक का नाम, और वस्तु का नाम।

यदि हम 4 से अधिक भागों देते हैं, तो यह हमेशा शून्य हो जाएगा।

रेफरी के लिए: http://msdn.microsoft.com/en-us/library/ms188006.aspx

संबंधित मुद्दे