SQL Server:如何从base64字符串中删除前导'A'

Via*_*dov 5 t-sql sql-server base64 xquery

我正在研究SQL Server并尝试创建一个组合来自bigintstring列的数据的单个键.为了最小化bigint's表示为字符串的大小我正在使用Base 64编码.问题是结果包括引导'A'意味着base64零并且它增加了结果字段的大小.A使用T-SQL或删除这些领先的方法是什么XQuery

示例代码:

DECLARE @binInput VARBINARY(MAX)
SET @binInput = CAST(123 AS VARBINARY(MAX))

SELECT CAST(N'' AS XML).value('xs:base64Binary(sql:variable("@binInput"))', 'varchar(max)')
Run Code Online (Sandbox Code Playgroud)

我有一个结果AAAAew==,我宁愿看到只是ew因为这个想法是尽可能地使最后的字符串尽可能短,而base64字符串应该比base10短.

更新1:正如Richard Boyce所建议的那样我试图将bigint转换为相等的字符串,但由于base64转换它给出了null

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)')
Run Code Online (Sandbox Code Playgroud)

更新2:当前的解决方案是获取base64binary字符串并删除前导'A和尾随'='.它并不完美,所以欢迎任何建议.实际代码:

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
Run Code Online (Sandbox Code Playgroud)

Lie*_*sel 1

不想留下无法回答问题的答案,以下是如何从字符串中删除多个前导 A(但 @Richard 给出的答案更好):

DECLARE @VAL NVARCHAR(MAX) = N'AAAA12345ABCD9876=='
SELECT SUBSTRING(@VAL,PATINDEX('%[^A]%',@VAL), LEN(@VAL))

----------------
12345ABCD9876==
Run Code Online (Sandbox Code Playgroud)