2010-09-07 8 views
7

का लेन कोई व्यक्ति कृपया बताएगा कि क्यों लेन (0x0a000b) 3 का चयन करता है? लेन लंबाई बाइट करता है? और क्यों बाएं का चयन करें (0x0a000b, 1) कुछ भी नहीं देता है? मैं 0x0A की उम्मीद ...varbinary

(यदि लेन बाइट्स में गिना जाता है) मैं mssql 2005

धन्यवाद Konstantin

उत्तर

5

select len(0x0a000b) तीन बाइट 0x0a, 0x00, और 0x0b द्वारा प्रदर्शित स्ट्रिंग की लंबाई लौटा रहा है।

select left(0x0a000b, 1) स्ट्रिंग के बाएं-सबसे चरित्र को लौटाता है, जो एक न्यूलाइन कैरेक्टर है।

ध्यान दें कि select case when left(0x0a000b, 1) = 0x0a then 1 else 0 end1 देता है, जो आपको इंगित करता है कि वास्तव में, आपको न्यूलाइन कैरेक्टर मिल रहा है।

संपादित करें: अतिरिक्त जानकारी के लिए कृपया नीचे दी गई टिप्पणियां देखें।

+0

कृपया यह उल्लेख करने के लिए अपडेट करें कि बाएं बाइनरी के बजाय वर्चर लौटाएंगे, और बदले में सबस्ट्रिंग का उपयोग करें। – ErikE

3

छोड़ दिया स्ट्रिंग ऑपरेटर का उपयोग कर रहा है और इसलिए यह में बाइनरी डेटा पर काम नहीं करता जिस तरह से आप इसे काम करने की उम्मीद करते हैं, इसके बजाय

लेन, दूसरी तरफ, बाइनरी डेटा (अन्य डेटा प्रकारों के अलावा) की लंबाई लौटाता है; हालांकि, स्ट्रिंग्स के लिए एक बहुत ही रोचक अपवाद है, जब हम इस कमांड का उपयोग करके स्ट्रिंग की लंबाई को मापते हैं तो यह पहले आरआरटीआईएम करता है; तो लेन ('ए') 1

+0

सत्य नहीं है ... बाएं (0x45000b, 1) – SQLMenace

+0

बिल्कुल चुनें! जिस तरह से आप इसे काम करने की उम्मीद नहीं करेंगे। –

+0

@SQLMenace 'substring (0x45000b, 1, 1)' का चयन करें जो 0x45 देता है लेकिन आपके चयन रिटर्न 'ई' – ErikE

1

किसी कृपया समझा क्यों चयन लेन (0x0a000b) रिटर्न 3

यह है 3 अक्षरों
0x यह द्विआधारी है इसका मतलब है

0A चरित्र 1
00 चरित्र 2
0b चरित्र 3

आपके पास एक गैर प्रिंट करने योग्य चरित्र है, मेरा मानना ​​है कि 0 ए एक कैरिज रेटू है आरएन, यह

select left(0x45000b, 1) 
संबंधित मुद्दे