如何将 8 字符字符串转换为 64 位 bigint,反之亦然?
How to convert 8-char string to a 64-bit bigint and vice versa?
有没有一种简单的方法可以将 8 个字符的字符串 (char(8)
) 转换为 64 位 bigint
? (使用 SQL 语句)。
以及如何将 bigint
转换回 char(8)
?
例如:'ABCDabcd'
应该变成0x4142434461626364
('A'=65=0x41 , 'B'=66=0x42, 等)
字符串将始终满足这些条件:
- 它将始终在 CP1 代码页中编码
- 它总是 8 个字符长(用空格填充)
- is 将仅使用 32 到 127(0x20 到 0x7F)之间的字符
转换 100% 准确且确定性非常重要。编码应始终提供相同的结果。
有几种方法可以做到这一点:
-- CHAR(8) variable
DECLARE @char8 CHAR(8) = 'ABCDabcd'
-- use BINARY_CHECKSUM, should be safe with a CHAR(8)
DECLARE @checkInt64 BIGINT = BINARY_CHECKSUM(@char8)
-- use CAST(... AS BINARY(8)), should be safe with a CHAR(8)
-- note: cannot cast directly from CHAR to INT/BIGINT
DECLARE @charBinary BINARY(8) = CAST(@char8 AS BINARY(8))
DECLARE @binaryInt BIGINT = @charBinary
SELECT @char8, @checkInt64, @charBinary, @binaryInt
-- output: ABCDabcd, 1450341456, 0x4142434461626364, 4702394921898894180
-- VARBINARY/BIGINT can be casted back to the CHAR as well:
SELECT CAST(CAST(@binaryInt AS BINARY(8)) as CHAR(8)), CAST(@charBinary AS CHAR(8));
-- output: ABCDabcd, ABCDabcd
BINARY_CHECKSUM
将适合此长度的 Int64,但只能是一种方式。
BINARY
将为您提供您想要的确切十六进制,并且也应该适合 bigint,并且应该可以转换回来。
有没有一种简单的方法可以将 8 个字符的字符串 (char(8)
) 转换为 64 位 bigint
? (使用 SQL 语句)。
以及如何将 bigint
转换回 char(8)
?
例如:'ABCDabcd'
应该变成0x4142434461626364
('A'=65=0x41 , 'B'=66=0x42, 等)
字符串将始终满足这些条件:
- 它将始终在 CP1 代码页中编码
- 它总是 8 个字符长(用空格填充)
- is 将仅使用 32 到 127(0x20 到 0x7F)之间的字符
转换 100% 准确且确定性非常重要。编码应始终提供相同的结果。
有几种方法可以做到这一点:
-- CHAR(8) variable
DECLARE @char8 CHAR(8) = 'ABCDabcd'
-- use BINARY_CHECKSUM, should be safe with a CHAR(8)
DECLARE @checkInt64 BIGINT = BINARY_CHECKSUM(@char8)
-- use CAST(... AS BINARY(8)), should be safe with a CHAR(8)
-- note: cannot cast directly from CHAR to INT/BIGINT
DECLARE @charBinary BINARY(8) = CAST(@char8 AS BINARY(8))
DECLARE @binaryInt BIGINT = @charBinary
SELECT @char8, @checkInt64, @charBinary, @binaryInt
-- output: ABCDabcd, 1450341456, 0x4142434461626364, 4702394921898894180
-- VARBINARY/BIGINT can be casted back to the CHAR as well:
SELECT CAST(CAST(@binaryInt AS BINARY(8)) as CHAR(8)), CAST(@charBinary AS CHAR(8));
-- output: ABCDabcd, ABCDabcd
BINARY_CHECKSUM
将适合此长度的 Int64,但只能是一种方式。
BINARY
将为您提供您想要的确切十六进制,并且也应该适合 bigint,并且应该可以转换回来。