से अग्रणी 'ए' को कैसे हटाएं मैं SQL सर्वर पर काम कर रहा हूं और bigint
और string
कॉलम से डेटा एकत्र करने की एक कुंजी बनाने की कोशिश कर रहा हूं। स्ट्रिंग्स के रूप में प्रतिनिधित्व bigint's
के आकार को कम करने के लिए मैं बेस 64 एन्कोडिंग का उपयोग कर रहा हूं। समस्या यह है कि परिणाम में 'ए का अर्थ base64
शून्य शामिल है और यह परिणामी क्षेत्र का आकार बढ़ाता है। T-SQL
या XQuery
का उपयोग करके इन अग्रणी A
को हटाने का तरीका क्या है?एसक्यूएल सर्वर: बेस 64 स्ट्रिंग
नमूना कोड:
DECLARE @binInput VARBINARY(MAX)
SET @binInput = CAST(123 AS VARBINARY(MAX))
SELECT CAST(N'' AS XML).value('xs:base64Binary(sql:variable("@binInput"))', 'varchar(max)')
मैं एक जिसके परिणामस्वरूप है AAAAew==
जहां मैं सिर्फ ew
विचार की वजह से देखने के लिए पसंद करेंगे अंतिम स्ट्रिंग के रूप में कम के रूप में यह संभव है और base64 स्ट्रिंग Base10 की तुलना में कम होना चाहिए बनाने के लिए है ।
अद्यतन 1: के रूप में रिचर्ड बोयस ने सुझाव दिया गया मैं बराबर स्ट्रिंग के लिए bigint परिवर्तित करने की कोशिश की है, लेकिन यह
declare @input bigint
declare @varInput nvarchar(max)
set @input = 123
set @varInput = cast(cast(@input as varbinary(max)) as varchar(max))
select CAST(N'' AS xml).value('xs:base64Binary(sql:variable("@varInput"))', 'varchar(max)')
अपडेट 2 बेस 64 रूपांतरण का एक परिणाम के रूप में अशक्त देता है: वर्तमान समाधान बेस 64 बाइनरी स्ट्रिंग प्राप्त करना और अग्रणी 'ए और पीछे' = 'को हटाने के लिए है। यह सही नहीं है, इसलिए किसी भी सुझाव का स्वागत है। वास्तविक कोड:
declare @input bigint
set @input = 1234567890
declare @output varchar(max)
set @output = (select cast(@input as varbinary(max)) for xml path(''),binary base64)
set @output = replace(ltrim(replace(@output,'A',' ')),' ','A') -- remove leading 'A's
set @output = replace(@output,'=','') -- remove trailing '='s
select @output
परिवर्तन "डाली (डाली (@input varbinary के रूप में (अधिकतम)))) "टू" कास्ट (कास्ट (वर्नर (अधिकतम) के रूप में @ इनपुट (var) के रूप में) " –
परिणामस्वरूप अभी भी 'शून्य' है। सवाल यह था कि जब 123 को तारों में परिवर्तित किया जाता है तो परिणाम के प्रतिनिधित्व के लिए तीन वर्ण होते हैं क्योंकि यह 10 आधारित है। और जब इसे बेस 64 में परिवर्तित किया जाता है तो इसे केवल दो अक्षर लेना चाहिए। तो इसे इस तरह से परिवर्तित किया जाना चाहिए: bigint-> बाइनरी-> बेस 64 स्ट्रिंग –