我使用标准的导入/导出工具将表格带入我的SQL数据库。所有日期都以CHAR类型的形式出现。现在,我不断收到转换错误,指出CHAR到datetime导致超出范围的情况。请帮忙。
答案 0 :(得分:0)
SQL Server中CHAR(x)类型的字段将用空格填充到其固定长度,例如如果你有CHAR(20)并且你有一个类似“2009-04-20”的日期,该字段将真正包含“2009-04-20”,这可能会在转换为datetime时造成麻烦。
此外,如果您的CHAR字段完全为空,则可能无法转换为有效的日期时间。
解决方案:
a)您可以将列的数据类型更改为VARCHAR(x),从而摆脱最可能不必要的填充:
ALTER TABLE YourTable
ALTER COLUMN YourColumnName VARCHAR(x)
b)您可以确保检查空的CHAR(x)字段值,而不是转换它们(或选择那些的默认日期时间值)
c)您可以修剪CHAR(x)字段以删除不必要的填充:
CONVERT(LTRIM(RTRIM(YourFieldName)), ......)
答案 1 :(得分:0)
除了来自marc_s的解决方案,请检查超出范围的值。
这可以解释为什么它升级为char而不是datetime ...你可能有一个日期< 1753
这仅适用于SQL Server 2005及之前的SQL Server 2008 has datetime2
答案 2 :(得分:0)
建议使用SQL Server Migration Assistant(SSMA)而不是MS Access中内置的升迁向导。绝对不那么痛苦。