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

एक दृश्य में कास्टिंग वैज्ञानिक संकेतन (वर्चर से -> संख्यात्मक)

यहाँ एक ही समय में दो अलग-अलग समस्याएं आ रही हैं। आइए उनमें से कुछ को देखें:

  1. आप संख्याओं को DECIMAL(18, 18) के रूप में कास्ट कर रहे हैं। इसका मतलब यह है कि "मुझे एक संख्या दें जिसमें कुल 18 वर्णों के लिए जगह हो, और उनमें से 18 दशमलव के बाद होनी चाहिए"। यह तब तक ठीक काम करता है जब तक आपकी संख्या 0 से छोटी है (जो सभी ई-नंबरों के लिए सही है) लेकिन यदि आप इसे संख्याओं> 0 पर उपयोग करने का प्रयास करते हैं तो यह टूट जाएगा। संख्याओं> 0 के लिए, बस कुछ और निर्दिष्ट किए बिना दशमलव के रूप में डालें ।

  2. उस स्थिति में जहां आप "जब @d जैसे '%E+%' फिर CAST(@d AS FLOAT)" जोड़ते हैं, तो आपको संख्या <0 के लिए अलग-अलग परिणाम मिल रहे हैं क्योंकि इंजन परोक्ष रूप से परिणाम अलग-अलग कास्टिंग कर रहा है। मैं नियमों को नहीं जानता कि कैसे sql सर्वर CASE परिणाम डालने का निर्णय लेता है, लेकिन स्पष्ट रूप से आपके प्रस्तावित परिवर्तन को करने से इंजन इसे एक अलग तरीके से पुन:स्थापित करता है। उन परिणामों को स्पष्ट रूप से दशमलव के रूप में कास्ट करने से समस्या ठीक हो जाती है।

  3. आपको अपने परिणामों को लगातार एलटीआरआईएम और आरटीआरआईएम करने की आवश्यकता है। आप या तो प्रत्येक केस स्टेटमेंट में LTRIM और RTRIM जोड़ सकते हैं, या आप केवल LTRIM और RTRIM को केस के परिणाम बता सकते हैं।

यहां एक समाधान दिया गया है जिससे पूरी तरह से सब कुछ हल हो जाना चाहिए:

SELECT
    LTRIM(RTRIM(CASE 
        WHEN @d like '%E-%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))
        WHEN @d like '%E+%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL)
        ELSE @d
    END))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस आरेख समर्थन वस्तुओं को स्थापित नहीं किया जा सकता ... कोई वैध स्वामी नहीं

  2. क्या GUID टकराव संभव है?

  3. सीटीई का उपयोग करके आसन्न सूची पदानुक्रम को क्वेरी और पार्स कैसे करें?

  4. पैरामीटर varbinary डेटाटाइप में शून्य मान

  5. SQL सर्वर में निकटतम तिथि खोजें