我正在SQL Server上的,并试图建立一个单一的钥匙从bigint
和string
列的数据组合。为了最小化表示为字符串的bigint's
的大小,我使用Base 64编码。问题是结果包括领先'A的含义base64
零,它增加了结果字段的大小。使用T-SQL
或XQuery
删除这些领先A
的方法是什么?SQL服务器:如何删除领先“的base64从字符串
示例代码:
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转换为等于串,但它给空为base64转换的结果
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:当前解决方案是得到一个base64二进制字符串,并删除前导'A和尾部'='s。这并不完美,所以我们欢迎任何建议。实际代码:
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
变化“CAST(CAST(@input为varbinary(MAX))为varchar(最大值) )“to”cast(cast(@input as varchar(max))as varbinary(max))“ –
结果仍然为'null'。问题是,当123被转换为一个字符串时,需要三个字符来表示结果,因为它基于10。当将其转换为base64时,它只需要两个字符。所以它应该这样转换:bigint-> binary-> base64字符串 –