如何将日期时间转换为 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 代码插入,可能会略有不同。
我有现有的数据表,其中包含一个实际上是日期的十六进制数据字段。
根据现有代码,我知道数据已转换为 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 代码插入,可能会略有不同。