2012-02-15 15 views
7

मैं सोच रहा था एसक्यूएल में IsNumeric का उपयोग कैसे करें के रूप में IsNumeric यदि का उपयोग करना, यह VBScript से थोड़ी अलग है, लेकिन मुझे लगता है कि मैं इसे चारों ओर पाने के लिए, यानी सक्षम था:तर्क

IF 1 = ISNUMERIC('5675754674') 
BEGIN 
... 
END 

यह एक तरीका होगा इसके आसपास? क्या मैं सच में करना चाहते हैं:

IF ISNUMERIC('5675754674') 
BEGIN 
... 
END 

लेकिन यह है कि एक त्रुटि देता है। उदाहरण 1 काम करता प्रतीत होता है, लेकिन यह सुनिश्चित कर रहा हूं कि मैं यह सही कर रहा हूं, इसके बारे में कोई भी अच्छा संसाधन ऑनलाइन नहीं ढूंढ पाया।

उत्तर

14

SQL सर्वर में कोई boolean नहीं है। इसका मतलब है कि आप केवल IF (expression) नहीं कह सकते हैं; आपको इसे किसी चीज़ से तुलना करना चाहिए, क्योंकि यह true या false को उसी अर्थ में वापस करता है जैसा कि आप शायद अन्य भाषाओं में उपयोग किए जाते हैं।

बस एक प्राथमिकता है, लेकिन मैं इसे इस तरह लिखने के लिए पसंद करेंगे:

IF ISNUMERIC('5675754674') = 1 
BEGIN 
... 
END 

एसक्यूएल सर्वर में कोई रास्ता नहीं है, 1 की तुलना से बचने के लिए अपने दूसरे उदाहरण के रूप में नहीं है।

के रूप में भी एक अलग रूप में आप ISNUMERIC() की कमजोरियों के बारे में पता होना चाहिए - यह "सांख्यिक" और अन्य गैर-संख्यात्मक तार के एक मेजबान के इस तरह के ., CHAR(9), e, $ के रूप में मूल्यों के लिए झूठे सकारात्मक दे सकते हैं। आप अगर कुछ, एक पूर्णांक है, उदाहरण के लिए जानना चाहते हैं, बेहतर कहने के लिए:

IF '5675754674' NOT LIKE '%[^0-9]%' 
BEGIN 
... 
END 

लेकिन फिर भी है कि पूर्ण और मान्य परीक्षण नहीं है, क्योंकि यह मान > (2^32)-1 के लिए सच वापस आ जाएगी और यह नकारात्मक के लिए अवास्तविक लौटाते हैं मान।

ISNUMERIC() को एक और नकारात्मक पक्ष यह है कि यह सच है, तो वापस आ जाएगी मूल्य किसी भी सांख्यिक प्रकार, जो के रूप में ही सब सांख्यिक प्रकार नहीं है की में बदला जा सकता है। अक्सर लोग ISNUMERIC() के लिए परीक्षण करते हैं और फिर FLOAT को SMALLINT पर डालने का प्रयास करते हैं और रूपांतरण विफल हो जाता है।

SQL सर्वर 2012 में आपके पास TRY_CONVERT() नामक एक नई विधि होगी जो NULL लौटाती है यदि निर्दिष्ट डेटा प्रकार का रूपांतरण मान्य नहीं है।

5

आप सही हैं, ISNUMERIC() एक int देता है। आप प्रलेखन की जांच कर सकते हैं: ISNUMERIC()

2

एसक्यूएल में IF बयान IF के बाद एक बूलियन अभिव्यक्ति की आवश्यकता है - देखना the MSDN reference here.

एसक्यूएल CAST() या CONVERT() की तरह कुछ है, जो कि int मूल्य ISUNUMERIC() रिटर्न का मतलब का उपयोग किए बिना प्रकार के बीच कास्टिंग से निपटने में सबसे अच्छा नहीं है जब आप कुछ तुलनित्र (=, <,>, आदि) का उपयोग सही/गलत परिणाम उत्पन्न करने के लिए करते हैं तो केवल एक बूलियन के रूप में हल किया जाएगा।

IF ISNUMERIC('5675754674') = 1 शायद टीएसक्यूएल में इसे लिखने का सबसे अच्छा तरीका है - यह स्पष्ट रूप से 'अगर इस फ़ंक्शन के माध्यम से चलाया जाता है तो यह मान देता है 1 (एक संख्यात्मक डेटा प्रकार के रूप में मूल्यांकन किया जा सकता है), तो यह काम करें।'

इस बात को ध्यान में रखते हुए, आपको अवगत होना चाहिए कि ISNUMERIC केवल यह जांचता है कि आपके द्वारा पास किया गया मान मूल्यांकन-संख्यात्मक डेटा प्रकार का मूल्यांकन करेगा। यदि आपके द्वारा चलाए जा रहे डेटा में वैज्ञानिक नोटेशन या अन्य अनियमितताएं हैं, तो इससे परेशानी हो सकती है; अधिक जानकारी के लिए here देखें।

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