Tôi đang làm việc trên SQL Server và cố tạo một khóa kết hợp dữ liệu từ các cột bigint
và string
. Để giảm thiểu kích thước của bigint's
được thể hiện dưới dạng chuỗi, tôi đang sử dụng mã hóa Base 64. Vấn đề là kết quả bao gồm hàng đầu 'A nghĩa là base64
số không và nó làm tăng kích thước của trường kết quả. Cách để xóa các số A
hàng đầu này bằng cách sử dụng T-SQL
hoặc XQuery
?Máy chủ SQL: cách xóa hàng đầu 'A's từ chuỗi base64
Mẫu mã:
DECLARE @binInput VARBINARY(MAX)
SET @binInput = CAST(123 AS VARBINARY(MAX))
SELECT CAST(N'' AS XML).value('xs:base64Binary(sql:variable("@binInput"))', 'varchar(max)')
tôi có một kết quả AAAAew==
nơi tôi muốn để xem chỉ ew
vì ý tưởng là làm cho chuỗi thức càng ngắn càng nó càng tốt và base64 chuỗi nên ngắn hơn base10 .
cập nhật 1: như đã được đề xuất bởi Richard Boyce tôi đã cố gắng để chuyển đổi bigint vào chuỗi bằng nhau, nhưng nó mang lại null như một kết quả của việc chuyển đổi 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)')
cập nhật 2: các giải pháp hiện tại là lấy chuỗi base64binary và loại bỏ hàng đầu 'A's và trailing' = 's. Nó không hoàn hảo, vì vậy bất kỳ đề xuất được chào đón. mã thực tế:
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
thay đổi "cast (cast (@input như varbinary (max)) như varchar (max)) "để" cast (cast (@input như varchar (max)) như varbinary (max)) " –
vẫn còn có 'null'. Câu hỏi đặt ra là khi 123 được chuyển thành một chuỗi, phải mất ba ký tự để biểu diễn kết quả vì nó là 10 dựa trên. Và khi chuyển đổi thành base64, nó chỉ mất hai ký tự. Vì vậy, nó cần được chuyển đổi theo cách này: bigint-> binary-> base64 string –