在 SQL Server 中正确修剪二进制数据

Dan*_*Dan 5 sql sql-server sql-server-2008-r2

设想:

我正在将一个字符串插入一个二进制字段 (CONTEXT_INFO),然后尝试将其拉出并将其转换回字符串。当我这样做时,结果字符串的长度为 128,因为它有尾随空字符。

例子:

DECLARE @string VARCHAR(128)
DECLARE @binary VARBINARY(128)

SET @string = 'abcdefg'
SET @binary = CONVERT(VARBINARY(128), @string) --0x61626364656667000000...
SET CONTEXT_INFO @binary
SET @binary = CONTEXT_INFO()

-- I would like to change the following line so it trims trailing null chars
SET @string = CONVERT(VARCHAR(128), @binary)

SELECT
    @binary AS [binary],
    DATALENGTH(@binary) AS [binary.Length], --128 as expected
    @string AS [string],
    DATALENGTH(@string) AS [string.Length] --This is 128, but I need it to be 7
Run Code Online (Sandbox Code Playgroud)

题:

将二进制字段转换为字符串时,如何修剪尾随的空字符?

Kaf*_*Kaf 5

试试这个,works on Sql-Server 2008.这是Sql Fiddle

请注意,我假设原始字符串中没有 Char(0),因为这甚至可以简单地从原始字符串替换它。

-- I would like to change the following line so it trims trailing null chars
SET @string = CONVERT(VARCHAR(128), @binary)
SET @string = REPLACE(@string, Char(0),'') 
Run Code Online (Sandbox Code Playgroud)