【发布时间】:2019-08-02 23:28:23
【问题描述】:
我正在进行从 MSSQL 到 MySQL 的数据迁移。我的日期/时间值正是它在两个数据库中的需要。但是,VBScript 会转换它(默认情况下):
2016-01-06 10:26:30.363
对此(INSERT 上的错误):
1/6/2016 10:26:30 AM
我知道我可以使用 Year()、Month() 等再次构造该值。有人知道如何使用 VBScript 从数据库中获取此日期/时间值不变吗?
更新:根据“显示我的代码”评论,这里有一个部分:
strSQL = "SELECT * FROM Users"
Set objRS = CreateObject("ADODB.RecordSet")
objRS.Open strSQL, objConn,3,3
Do While Not objRS.EOF
sUserId = objRS("UserId")
sCreatedDate = objRS("CreatedDate") '<-- At this point, it's "converted" already
wscript.echo sCreatedDate '<-- This displays 1/6/2016 10:26:30 AM format
insertSQL = "INSERT INTO northwind.usersetting (UserId,CreatedDate) "
insertSQL = insertSQL & "VALUES ('"&sUserId&"','"&sCreatedDate &"');"
objConn2.Execute = (insertSQL)
objRS.MoveNext
Loop
只是您的标准 vbscript。我想我可以在 MSSQL 中解决这个问题,但 MySQL 不喜欢它。与此同时,我已经这样做以解决这个问题:
Function FormatDate4Insert(date)
FormatDate4Insert = Year(date) & "-" & Month(date) & "-" & Day(date) & " " & Hour(date) & ":" & Minute(date) & ":" & Second(date)
End Function
我很想直接进行非转换,但无论我做什么,vbs 似乎都会转换。我尝试转换为字符串和其他一些没有乐趣的东西......
附:我不确定您所说的数据库导入导出机制是什么意思。但是,我尝试了 MySQL 迁移工具以及导出和导入机制(到 csv ......具有不同的分隔符等......甚至是 json 导出,使用 Notepad++ 和 Excel 等按摩数据)并且无法获得数据与我的选择性导入有关。在大多数情况下,我可以毫无问题地迁移整个数据库,但只想从单个表中获取数据。当我浪费太多时间时,我通常会退回到 vbscript 或任何有意义的脚本。
我发现这两个数据库在某些方面都更加宽容和挑剔。但是,使用 MSSQL 到 MySQL,我必须将空值转换为“NULL”,将 True/False 转换为它们的位值(例如 b'0')以及脚本编写更容易的其他小调整(至少对我而言)。
更新 2:请求的错误:
用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序:[MySQL][ODBC 8.0(w) 驱动程序][mysqld-8.0.16]不正确的日期时间值:'1/6/2016 10:26:30 AM' 对于第 1 行的“CreatedDate”列。
我无法重现另一个错误,但我也遇到了与此类似的错误:
错误:您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 接近 '1/6/2016 10:26:30 AM'
这是对插入语句的引用。
【问题讨论】:
-
如果您使用数据库导出和导入机制,VBScript 根本不应该接触数据。请出示您的代码。
-
@AnsgarWiechers 正如我上面提到的,这就是我尝试过的(两天),但无法让数据在两个数据库之间移动。删除了几列并添加了几列。但是,我基本上没有这样做的想法。此外,以 json 格式导入会表示所有内容均已成功导入,然后在下一个屏幕上显示“0 条记录已导入”。我想我可以针对导入时遇到的错误提出另一个 SO 问题,但我基本上已经完成了我需要做的事情。
标签: vbscript