Dan*_*Dan 6 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)
问题:
当我将二进制字段转换为字符串时,如何修剪尾随的空字符?
这看起来有点不安全,但事实证明它CONTEXT_INFO会吃掉空字符串并返回 NULL:
SET @string = LEFT(@string, CHARINDEX(CONVERT(varchar(1), 0x00), @string, 1) - 1);
Run Code Online (Sandbox Code Playgroud)
或者,事实证明您可以直接指定要在REPLACE函数中搜索的二进制值:
SET @string = REPLACE(CONVERT(VARCHAR(128), @binary), 0x00, '');
Run Code Online (Sandbox Code Playgroud)
这当然不会只修剪尾随空字符,但我认为就足够了。
注意:如果您切换到使用nvarchar(64).
| 归档时间: |
|
| 查看次数: |
2941 次 |
| 最近记录: |