现在有导出的数据sql脚本一份,里面的datetime类型的值都是如下格式
CAST(0x0000A20D00EB07DD AS DateTime))根据我测试得出的结论,0x0000A20D00EB07DD 这个值是被cast把时间类型转换为binary得到的,即
CAST(时间 AS binary))现在问题就是,它的具体算法是什么,我需要在sql server外部读取该字符串并转回去,或者如果你们有别的办法直接让他输出标准格式的时间字符串也行
CAST(0x0000A20D00EB07DD AS DateTime))根据我测试得出的结论,0x0000A20D00EB07DD 这个值是被cast把时间类型转换为binary得到的,即
CAST(时间 AS binary))现在问题就是,它的具体算法是什么,我需要在sql server外部读取该字符串并转回去,或者如果你们有别的办法直接让他输出标准格式的时间字符串也行
0(默认值)
将 ASCII 字符转换为二进制字节,或者将二进制字节转换为 ASCII 字符。每个字符或字节按照 1:1 进行转换。如果 data_type 为二进制类型,则会在结果左侧添加字符 0x。
select CAST(0x0000A20D00EB07DD AS DateTime)
select CAST(0x0000A20D00000000 AS DateTime)
select CAST(0x0000000000EB07DD AS datetime)
结果是:
2013-08-01 14:15:43.243
2013-08-01 00:00:00.000
1900-01-01 14:15:43.243通过结果可以看出,前8位数字表示天数,后8位数表示毫秒数。如果要进行转换,可以将前8位数字转换成十进制整数(41485),再加上1900/1/1这个日期,就是实际日期了(2013-08-01)。
(碰到一个怪现象,在sql server、oracle、delphi下,转换后是2013-08-01,但在EXCEL中,转换后却是2013-07-31,不知是什么原因)
将后8位数字转换成十进制整数(15402973),再计算出时、分、秒和毫秒。
(这里碰的怪现象是,将15402973直接计算,结果是04:16:42.970,如果是要算出14:15:43.243这个结果,必须要将15402973*10/3后的结果再计算,才是正确的。)
默认值是1900-01-01 00:00:00.000Excel与SQL Server不一样。Excel是粗略计算,例如,计算时固定每月为30天。