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

एसक्यूएल सर्वर रोवर्जन को लंबे या लंबे समय तक परिवर्तित करना?

यह मायने रखता है। आप चाहते हैं कि आपकी तुलना का परिणाम SQL सर्वर की तुलना के समान हो। SQL सर्वर बाइनरी प्रकारों पर अहस्ताक्षरित तुलनाओं का उपयोग करता है:

select case when 0x0FFFFFFFFFFFFFFF < 0xFFFFFFFFFFFFFFFF then 'unsigned' else 'signed' end

अगर आप long . के साथ भी ऐसा ही करते हैं जिस पर हस्ताक्षर किया गया है, 0xFFFFFFFFFFFFFFFF -1 . का प्रतिनिधित्व करता है . इसका मतलब है कि आपकी तुलना गलत होगी; यह SQL सर्वर में की गई समान तुलना से मेल नहीं खाएगा।

आप जो निश्चित रूप से चाहते हैं वह है ulong . का उपयोग करना जहां 0xFFFFFFFFFFFFFFFF है ulong.MaxValue

एंडियननेस भी महत्वपूर्ण है

इसके अतिरिक्त, जैसा कि मार्क ने बताया, BitConverter.GetUInt64 ठीक से परिवर्तित नहीं हो रहा है। मार्क पूरी तरह से सही नहीं है - BitConverter यह जिस सिस्टम पर चल रहा है उसके आधार पर या तो बड़ा-एंडियन या छोटा-एंडियन है। आप इसे स्वयं देख सकते हैं . इसके अलावा, भले ही बिटकॉन्टर हमेशा छोटे-एंडियन था, Array.Reverse ढेर आवंटन और बाइट-बाय-बाइट प्रतिलिपि के साथ कम प्रदर्शनकारी है। BitConverter शब्दार्थ या व्यावहारिक रूप से नौकरी के लिए सही उपकरण नहीं है।

आप यही चाहते हैं:

static ulong BigEndianToUInt64(byte[] bigEndianBinary)
{
    return ((ulong)bigEndianBinary[0] << 56) |
           ((ulong)bigEndianBinary[1] << 48) |
           ((ulong)bigEndianBinary[2] << 40) |
           ((ulong)bigEndianBinary[3] << 32) |
           ((ulong)bigEndianBinary[4] << 24) |
           ((ulong)bigEndianBinary[5] << 16) |
           ((ulong)bigEndianBinary[6] <<  8) |
                   bigEndianBinary[7];
}

सबसे साफ समाधान

अपडेट करें :यदि आप .NET Core 2.1 या बाद के संस्करण (या .NET मानक 2.1) का उपयोग करते हैं, तो आप BinaryPrimitives.ReadUInt64BigEndian जो एकदम फिट है।

.NET फ्रेमवर्क पर, मेरे द्वारा उपयोग किया जाने वाला समाधान है:Timestamp.cs . मूल रूप से एक बार जब आप Timestamp पर डाल देते हैं , आप गलत नहीं हो सकते।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक तकनीकी तुलना:माइक्रोसॉफ्ट एक्सेस 2016 बनाम एसक्यूएल सर्वर 2016

  2. SQL सर्वर में (nolock) के साथ क्या है?

  3. SqlDataReader का धीमा प्रदर्शन

  4. एसक्यूएल फुलटेक्स्ट 'शामिल' फ़ंक्शन के अंदर आप डबल कोट्स से कैसे बचते हैं?

  5. SQL सर्वर में लघु दिन का नाम प्राप्त करें (T-SQL)