2012-11-16 30 views
10

यह आसान हो सकता है, लेकिन मैं कोई एसक्यूएल नहीं हूं इसलिए मैं खो रहा हूं। मैं समझता हूँ कि एसक्यूएल आपकी क्वेरी लेता है और एक निश्चित क्रम में यह निष्पादित करता है, जो मेरा मानना ​​है कि यही कारण है कि इस क्वेरी से काम नहीं करता है:जांचें कि फ़ील्ड संख्यात्मक है, फिर केवल एक ही कथन में उन फ़ील्ड पर तुलना निष्पादित करें?

select * from purchaseorders 
where IsNumeric(purchase_order_number) = 1 
and cast(purchase_order_number as int) >= 7 

purchar_order_number क्षेत्रों में से सबसे सांख्यिक हैं, लेकिन हम हाल ही में अक्षरांकीय लोगों परिचय। जिस डेटा को मैं प्राप्त करने का प्रयास कर रहा हूं वह यह देखने के लिए है कि '7' उच्चतम संख्यात्मक खरीद_ऑर्डर_नंबर से अधिक है या नहीं।

संख्यात्मक() फ़ंक्शन ठीक अक्षरांकीय क्षेत्रों को फ़िल्टर कर देता है, लेकिन बाद डाली तुलना कर इस त्रुटि फेंकता है:

Conversion failed when converting the nvarchar value '124-4356AB' to data type int. 

मैं नहीं कह रहा हूँ कि क्या त्रुटि का अर्थ है, कि स्पष्ट है। मैं पूछ रहा हूं कि एक ही प्रश्न में जो कुछ मैं चाहता हूं उसे पूरा करने का कोई तरीका है, अधिमानतः ओआरएम बाधाओं के कारण जहां खंड में।

+1

चूंकि यह केवल एक अंक, आप बस कह सकते हैं 'और PURCHASE_ORDER_NUMBER> '7'' –

+0

आप अनुक्रमित सहित' purchaseorders' तालिका के लिए स्कीमा प्रदान कर सकते हैं क्या है? मैं एक रेपो बनाने की कोशिश कर रहा हूं - मैं वर्तमान में श्याज के उदाहरण के साथ त्रुटि संदेश प्राप्त कर सकता हूं लेकिन आपके साथ नहीं। –

उत्तर

22

आप के लिए काम करता है के साथ एक का चयन कर सकते हैं?

select * from purchaseorders 
where (case when IsNumeric(purchase_order_number) = 1 
     then cast(purchase_order_number as int) 
     else 0 end) >= 7 
+0

धन्यवाद! महान – ledgeJumper

1

आप एक subselect

select * from (
select * from purchaseorders 
where IsNumeric(purchase_order_number) = 1) as correct_orders 
where cast(purchase_order_number as int) >= 7 
+0

@AaronBertrand आप सही हैं। माफ़ कीजिये। – ShyJ

+0

लेकिन ऑप्टिमाइज़र अभी भी इस क्वेरी को फिर से लिख सकता है और फिल्टर से पहले कास्ट को संसाधित कर सकता है। –

+0

@AaronBertrand यह वास्तव में ऐसा कर सकता है? क्योंकि इससे क्वेरी के अर्थशास्त्र बदल जाएंगे। – ShyJ

0

इस प्रयास करें:

select * from purchaseorders 
where try_cast(purchase_order_number as int) >= 7 
+0

काम करता है, जबकि यह कोड स्निपेट प्रश्न हल कर सकता है, [एक स्पष्टीकरण सहित] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) वास्तव में आपकी गुणवत्ता में सुधार करने में मदद करता है पद। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। – bahrep

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

  • कोई संबंधित समस्या नहीं^_^