Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle में शेष () फ़ंक्शन के व्यवहार को समझना

जिन लोगों ने प्रलेखन लिखा है (जो अंकगणित से कुछ परिभाषाओं को याद नहीं करते हैं) खुद को इस बारे में अनिश्चित लगते हैं कि उन्होंने क्या लिखा है। एक ओर, स्पष्टीकरण की शुरुआत में वे ROUND . का उल्लेख करते हैं - फिर भी बाद में जब वे अधिक औपचारिक परिभाषा देते हैं तो वे कहते हैं

"निकटतम पूर्णांक" को अंकगणित में औपचारिक रूप से परिभाषित नहीं किया गया है, और वास्तव में किसी को उस नाम का उपयोग राउंड (x) के लिए करने की अनुमति है, सिवाय इसके कि जब x का भिन्नात्मक भाग ठीक 0.5 है, जिस स्थिति में "पूर्णांक निकटतम" अस्पष्ट है और कोई भी चुन सकता है "राउंड डाउन" का उपयोग "नजदीकी पूर्णांक" की अपनी परिभाषा के रूप में करें।

यदि आप कर सकते हैं, तो दस्तावेज़ीकरण में ऐसी विसंगतियों से बहुत परेशान न हों। आप और भी बहुत कुछ देखेंगे।

हालांकि :इससे भी बुरी बात यह है कि व्यवहार असंगत है। मैं Oracle 12.1 का उपयोग करता हूं, और अपनी मशीन पर मैंने अभी कोशिश की और मुझे मिलता है

remainder(10, 4) =  2
remainder( 6, 4) = -2

कोई तुक या कारण नहीं। FLOOR और इस तरह का उपयोग करके अपना खुद का विभाजन करना बेहतर है।

संपादित करें - या शायद कोई कारण है; शायद वे "निकटतम पूर्णांक" की परिभाषा का उपयोग करते हैं, जिसका अर्थ है, टाई के मामले में, निकटतम सम पूर्णांक। अभी भी अप्रत्याशित परिणाम दे रहे हैं, सबसे अच्छा है कि Oracle के REMAINDER() फ़ंक्शन का उपयोग न करें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle sql ट्यूटोरियल :डेटा सेट को प्रतिबंधित करना

  2. ORA-01858 देखकर:एक गैर-संख्यात्मक वर्ण पाया गया जहां एक संख्यात्मक अपेक्षित था

  3. Sys को Sysdba के रूप में कनेक्ट करें:अपर्याप्त विशेषाधिकार

  4. एक ही कॉलम से कई पंक्तियों को वापस करने के लिए PLSQL फ़ंक्शन को संशोधित करना

  5. ओरेकल 'प्रिंटफ' समकक्ष