gpt4 book ai didi

java - 如何将 SQLServer "CAST(0xBB330B00 AS Date)"转换为 MySQL 语法

转载 作者:行者123 更新时间:2023-11-29 13:55:15 25 4
gpt4 key购买 nike

我有一个来自 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-01
  • 对于datetime,有8个十六进制格式的字节不应该反转(最左边的4个字节是日期,最右边的4个字节是时间);对于日期,只有4个字节应该被反转

总之,这里是一个示例 Matlab 代码,用于将 SQLServer datedatetime 对象转换为等效的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com