我目前有一个接受varbinary的函数,因为它允许我传递时间戳以便与其他时间戳进行比较而不会强制转换它但是我的比较失败,因为时间戳存储为bigint然后转换为varbinary然后传递给但是,强制转换器不会将时间戳存储为16个字节,而是存储8个字节,这会导致比较返回false。
即:
DECLARE @Test1 varbinary(16) = CAST(506693 as varbinary(16)) -- 0x0007BB45
DECLARE @Test2 timestamp = CAST(506693 as Timestamp) -- 0x000000000007BB45
当我将Test1与时间戳进行比较时,时间戳大于test1,它返回false,但是如果我使用Test2则返回true(这是正确的)
有没有办法让varbinary存储额外的零?
答案 0 :(得分:1)
希望这会有所帮助:
--It is no difference how you declare it
DECLARE @Test8 varbinary(8) = CAST(506693 as varbinary(8));
DECLARE @Test64 varbinary(64) = CAST(506693 as varbinary(64));
SELECT sys.fn_varbintohexstr(@Test8); --0x0007bb45
SELECT sys.fn_varbintohexstr(@Test64); --0x0007bb45
--but it is a difference what you are casting
DECLARE @Test16 varbinary(16) = CAST(CAST(506693 AS bigint) as varbinary(16));
DECLARE @TestTS timestamp = CAST(506693 as Timestamp);
SELECT sys.fn_varbintohexstr(@Test16); --0x000000000007bb45
SELECT sys.fn_varbintohexstr(@TestTS) --0x000000000007bb45