作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个来自 SQL Server 数据库的脚本,其中包含如下语句:
INSERT SPECIAL_DAYS_TABLE (Date, Description) VALUES (CAST(0xB5330B00 AS Date), 'Christmas')
我的问题:如何将其转换为有效的 MySQL 语法?类型转换部件返回空日期值...
不幸的是,我无法访问 SQLServer 数据库,无法直接导入数据 - 脚本是我唯一可以使用的东西。
注意:有数百个这样的语句,因此我需要以编程方式在 MySQL 中或 MySQL 外部(C/Java/Matlab/VB)转换转换部分。
编辑:答案已根据 how to cast the hexadecimal to varchar(datetime)? 关闭以及马丁在下面评论中的更正
显然,0xB5330B00 应解释为 0x000B33B5(即反转字节)= 734133(自 0001-Jan-01 以来的天数)
CAST('0001-01-01 00:00:00' + INTERVAL CAST(0x000B33B5 AS SIGNED) DAY as date) => 2010-12-28
最佳答案
根据 how to cast the hexadecimal to varchar(datetime)?马丁在下面的评论中进行了更正,显然,0xB5330B00 应解释为 0x000B33B5(即反转字节)= 734133(自 0001-Jan-01 以来的天数)
所以完整的答案是:
INSERT SPECIAL_DAYS_TABLE (Date, Description) VALUES (CAST('0001-01-01' + INTERVAL 0x000B33B5 DAY as date), 'Christmas')
请注意此问题/解决方案与上面引用的问题/解决方案之间的差异:
日期时间
,基准 SQLServer 日期为 1900-01-01;对于日期
,它是0001-01-01datetime
,有8个十六进制格式的字节不应该反转(最左边的4个字节是日期,最右边的4个字节是时间);对于日期
,只有4个字节应该被反转总之,这里是一个示例 Matlab 代码,用于将 SQLServer date
和 datetime
对象转换为等效的 MySql 语法:
% Convert dates in MATLAB from SQLServer => MySQL
% Datetime: byte order is NOT reversed & start date is 1/1/1900
str = regexprep(str, 'CAST\(0x(........)(........) AS DateTime\)', ...
'CAST(''1900-01-01'' + INTERVAL 0x$1 DAY + INTERVAL 0x$2/300 second as datetime)');
% Date: byte order is reversed & start date is 1/1/0001
str = regexprep(str, 'CAST\(0x(..)(..)(..)(..) AS Date\)', ...
'CAST(''0001-01-01'' + INTERVAL 0x$4$3$2$1 DAY as date)');
此代码片段可以轻松地适用于其他编程语言。
关于java - 如何将 SQLServer "CAST(0xBB330B00 AS Date)"转换为 MySQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968869/
我是一名优秀的程序员,十分优秀!