如何将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
格式。
这些存储方式不同。它们占用三个字节,并表示自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