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

本文关键字:十六进制 存储 SQL 转换 日期 时间 | 更新日期: 2023-09-27 18:08:29

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

从现有的代码中,我知道数据被转换为DATETIME值:

SELECT CAST(0x0000214900000000 AS DATETIME) 

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

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

我如何执行这个转换?

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

如果你在做这一切在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

基本上就是将一个对象类型"强制转换"到另一个对象。但是对于varbinary,如果要存储它,还需要指定长度。如果允许类型转换,您可以很容易地在SQL中来回转换。如果您想直接从。net代码中插入,则可能略有不同。