आपको जो परिणाम मिलता है वह इसलिए है क्योंकि स्ट्रिंग "0003f80075177fe6" (एक VARCHAR
value) को कोड बिंदुओं में बदल दिया जाता है, और इन कोड बिंदुओं को बाइनरी मान के रूप में प्रस्तुत किया जाता है। चूंकि आप शायद ASCII-संगत संयोजन का उपयोग कर रहे हैं, इसका मतलब है कि आपको ASCII कोड अंक मिलते हैं:0
48 (30 हेक्स) है, f
102 (66 हेक्स) और इसी तरह है। यह 30 30 30 33 66 38 30 30...
. की व्याख्या करता है
इसके बजाय आप जो करना चाहते हैं वह स्ट्रिंग को बाइट्स के हेक्साडेसिमल प्रतिनिधित्व के रूप में पार्स करना है (00 03 f8 00 75 71 77 fe 66
) CONVERT
एक अतिरिक्त "शैली" पैरामीटर स्वीकार करता है जो आपको हेक्सस्ट्रिंग्स को परिवर्तित करने की अनुमति देता है:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
स्टाइल 2 एक हेक्सस्ट्रिंग को बाइनरी में परिवर्तित करता है। (शैली 1 स्ट्रिंग के लिए वही करती है जो "0x" से शुरू होती है, जो यहां नहीं है।)
ध्यान दें कि यदि 16 बाइट्स से कम हैं (जैसा कि इस मामले में), मान शून्य के साथ दायां-गद्देदार है (0x0003F80075177FE60000000000000000
) अगर आपको इसकी जगह लेफ्ट-पैडेड की जरूरत है, तो आपको इसे खुद करना होगा:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
अंत में, ध्यान दें कि बाइनरी अक्षर रूपांतरण के बिना उन्हें "0x" के साथ उपसर्ग करके और उद्धरणों का उपयोग नहीं करके निर्दिष्ट किया जा सकता है:SELECT 0x0003f80075177fe6
प्रकार का एक कॉलम लौटाएगा BINARY(8)
. इस क्वेरी के लिए प्रासंगिक नहीं है, लेकिन केवल पूर्णता के लिए।