如何将CAST(0xE3350B00 AS DATE)转换为mysql?

我使用了各种论坛支持,并得到以下结果

0xE3350B00 => 2059-04-03 22:56
0x0000A17F00000000 => 2013-03-12


但是两个日期都属于同一行数据,因此我有信心将0xE3350B00转换为附近的2013-03-12,但在技术上找不到它?如果0xE3350B00日期转换,谁能帮忙?

我在sql函数中使用了以下代码:

return date_add(date_add("1900-01-01 00:00:00", interval conv(substr(HEX(raw_data), 5, 4), 16, 10) DAY), interval conv(substr(HEX(raw_data), 1, 4), 16, 10) MINUTE);

最佳答案

您所拥有的代码看起来好像是在解析SQL Server datetime值(though incorrectly if they have any time part)。

看起来像SQL Server二进制date格式。

mysql - 如何在mysql中解析SQL Server二进制日期格式?-LMLPHP

这些存储方式不同。它们占用三个字节,并表示自0001-01-01以来的天数(以字节为单位)。

您可以使用

SELECT
      CAST(
          '0001-01-01 00:00:00' +
          INTERVAL CAST(CONV(
                        CONCAT(substr(HEX(BinaryData),5,2),
                               substr(HEX(BinaryData),3,2),
                               substr(HEX(BinaryData),1,2))
                        , 16, 10)  AS SIGNED) DAY
      AS DATE) AS converted_date
FROM
(
SELECT 0xE3350B00 AS BinaryData
) d


计算结果为2012-07-08

SQL Fiddle

08-16 21:56