如何将日期时间转换为 SQL 中的十六进制存储?

How to convert from datetime to store as Hex in SQL?

我有现有的数据表,其中包含一个实际上是日期的十六进制数据字段。

根据现有代码,我知道数据已转换为 DATETIME 值:

SELECT CAST(0x0000214900000000 AS DATETIME) 

我现在的问题是我需要手动将值插入这些字段,但我不知道如何为给定的 DATETIME.

生成十六进制值

我已尝试插入 AS BINARY(8),但 return 不是上面的正确值。

如何执行此转换?

如果您在 SQL 中执行所有操作,这里是一个简单的示例,它全部存在于内存中。您可以 运行 这与 SQL Management Studio 中的一样,语法应该适用于 2008 SQL 服务器及更高版本。

DECLARE 
    @Date   DateTime = getdate()
,   @Hex    varbinary(8)
;

DECLARE @Temp TABLE ( value varbinary(8) );

INSERT INTO @Temp VALUES (0x0000214900000000),(cast(@Date AS varbinary));

Select
    value
,   cast(value AS DateTime)
from @Temp

SELECT @Hex = cast(cast('2015-04-01' AS DateTime) AS varbinary)

INSERT INTO @Temp VALUES (@Hex)

Select
    value
,   cast(value AS DateTime)
from @Temp

你基本上'cast'一个对象类型到不同的对象。然而,对于 varbinary,如果要存储它,则还需要指定一个长度。如果允许类型转换,您可以很容易地在 SQL 中来回转换。如果您想直接从 .NET 代码插入,可能会略有不同。