2013-11-28 11 views
5
SELECT -1 * 100/10 
SELECT 100 * -1/10 

के आदेश की प्राथमिकता परिणाम में भिन्न है। पहला रिटर्न -10, दूसरा 0। स्पष्ट रूप से यह आदेश के कारण होता है।गुणा और विभाजन

लेकिन मुझे कोई जानकारी नहीं मिल रही है कि गुणों की तुलना में डिवीजनों में अधिक भार है।

http://technet.microsoft.com/en-gb/library/ms190276%28v=sql.105%29.aspx गुणा और भाग को देखते हुए एक ही स्तर पर कर रहे हैं और उस पर पढ़ने

लिखा है जब एक अभिव्यक्ति में दो ऑपरेटरों एक ही ऑपरेटर पूर्वता स्तर है, वे के आधार पर बाएं से दाएं मूल्यांकन किया जाता है उनके अभिव्यक्ति में स्थिति।

इसके बारे में, दूसरी क्वेरी का मूल्यांकन इस तरह किया जाना चाहिए: 100 * -1 -> result/10, है ना?

+2

अच्छी तरह से, आपको अपनी क्वेरी में 'शून्य' मिल गया है, जो एक ऑपरेटर भी है। '100 * (-1)/10 का चयन करें और अंतर देखें ... –

उत्तर

1

यह या तो दस्तावेज़ में या SQL सर्वर में "दोष" है: आपके लिंक के अनुसार ऋणात्मक ऑपरेटर - गुणा और विभाजन की तुलना में कम ऑपरेटर प्राथमिकता है, फिर भी इसका मूल्यांकन मूल्यांकन के क्रम पर प्रभाव पड़ता है। आप इसे देख सकते हैं क्योंकि आप केवल int मानों का उपयोग कर रहे हैं ताकि -1/10 परिणाम 0 में परिणाम हो। आप चल बिन्दु arithmetics का प्रयोग करेंगे तो सब कुछ ठीक हो जाएगा:

SELECT -1 * 100/10.0 
SELECT 100 * -1/10.0 

या आप निगेट चर "छिपाएँ" इस्तेमाल कर सकते हैं:

DECLARE @a int 
DECLARE @b int 
DECLARE @c int 

SELECT @a=-1, @b=100, @c=10 

SELECT @a*@b/@c 
SELECT @b*@a/@c 

और जटिल arithmetics (साथ हमेशा की तरह जटिल की तुलना में अधिक है इसका मतलब एक ऑपरेटर) आप अपने जवाब में उल्लिखित @ मैक जैसे मूल्यांकन के एक निश्चित क्रम को लागू करने के लिए ब्रांड्स का उपयोग कर सकते हैं।

0

select 100 *-Cast(1 as float)/Cast(10 as float)

आप या तो दशमलव या नाव, या यहाँ तक संख्यात्मक रूप में क्षेत्र कास्ट करने के लिए की जरूरत है।

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