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