【问题标题】:How to convert from datetime to store as Hex in SQL?如何从日期时间转换为 SQL 中的十六进制存储?
【发布时间】:2015-08-18 17:28:21
【问题描述】:

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

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

SELECT CAST(0x0000214900000000 AS DATETIME) 

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

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

如何执行此转换?

【问题讨论】:

  • 这是一个时间戳字段吗?
  • 样本输入十六进制值是多少,预期输出日期值是多少?
  • 嗯?我不知道。这是我在 SQLServer 中编写数据表脚本时创建的值。它们看起来像上面一样,我需要这样的值。 - 示例输入值是正常日期,例如:1923-05-18 00:00:00.000。输出如上
  • 取你的日期并减去'1900-01-01' 现在时间跨度的天数是转换为十六进制的天数,时间部分更复杂,但如果你不需要它只需添加缺少的 8 个零

标签: c# sql datetime casting hex


【解决方案1】:

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

【讨论】:

  • 谢谢!这正是我想要的!
猜你喜欢
  • 2022-09-29
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多