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

时间:2015-08-18 17:28:22

标签: c# sql datetime casting hex

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

从现有代码中,我知道数据已转换为DATETIME值,其中包含:

SELECT CAST(0x0000214900000000 AS DATETIME) 

我现在的问题是我需要手动将值插入到这些字段中,但我不知道如何为给定的DATETIME生成十六进制值。

我尝试插入AS BINARY(8),但这并没有像上面那样返回正确的值。

如何执行此转换?

1 个答案:

答案 0 :(得分:0)

如果您在SQL中执行此操作,则此处是一个存在于内存中的简单示例。您可以像在SQL Management Studio中那样运行它,并且语法应该适用于2008 SQL Server及更高版本。

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代码中插入,可能会略有不同。