2013-06-28 5 views
15

पर पास किया गया अमान्य लंबाई पैरामीटर मैंने इन प्रश्नों में से कुछ को देखा है लेकिन किसी ने मदद नहीं की है !! मैं केवल एक पोस्टकोड के पहले भाग का चयन करने की कोशिश कर रहा हूं, अनिवार्य रूप से अंतरिक्ष के बाद कुछ भी अनदेखा कर रहा हूं। कोड मैं उपयोग कर रहा हूँLEFT या SUBSTRING फ़ंक्शन

SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode) -1) 

लेकिन मैं अमान्य लंबाई पैरामीटर LEFT या SUBSTRING कार्य करने के लिए पारित कर दिया हो रही है है! कोई नल या रिक्त स्थान नहीं है लेकिन कुछ में केवल पहला हिस्सा है। क्या यह त्रुटि पैदा कर रहा है और यदि ऐसा है तो आसपास क्या काम करता है ?!

उत्तर

21

यह तब होगा जब PostCode में कोई स्थान नहीं है। आप शर्त ऐसी है कि PostCode के सभी के रूप में इस प्रकार है

select SUBSTRING(PostCode, 1 , 
case when CHARINDEX(' ', PostCode) = 0 then LEN(PostCode) 
else CHARINDEX(' ', PostCode) -1 end) 
6

CHARINDEX0 वापस आ जाएगी अगर कोई रिक्त स्थान स्ट्रिंग में हैं और फिर आप -1 लंबाई की सबस्ट्रिंग के लिए देखो लिया गया है कोई रिक्त स्थान नहीं पाया जा चाहिए जोड़ सकता है।

आप स्ट्रिंग के अंत तक एक पिछली जगह पर जा सकते हैं ताकि यह सुनिश्चित किया जा सके कि कम से कम एक स्थान हमेशा होता है और इस समस्या से बचें।

SELECT SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode + ' ') -1) 
4

इसका कारण यह है CHARINDEX -1 एक -ive मूल्य लौटा रहा है, तो "" (स्थान) के लिए लुक-अप 0. है आसान समाधान '-ve' से बचने के लिए होगा

ABS(CHARINDEX(' ', PostCode) -1))

जो आपके लंबाई के लिए केवल + Ive मान जाएगा, भले ही CHARINDEX(' ', PostCode) -1) एक -ve मूल्य है जोड़ने। यदि मैं गलत हूं तो मुझे सही करों!

+0

कृपया बताएं कि किस मामले में CHARINDEX नकारात्मक है – fjuan

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