导入日期列以错误结束

时间:2014-11-13 05:16:10

标签: sql-server sql-server-2008 ssms

当我尝试在ssms导入/导出向导中上传包含数据类型为DATE的日期字段的flatfile时,会抛出如下错误

  

从字符串

转换日期和/或时间时转换失败

平面文件中的实际数据

  Period
12/17/2003
01/01/0001
10/25/2001
01/01/0001

请帮助我如何上传这些日期.....我知道错误在于包含&01,01 / 01/0001'但是业务逻辑我无法改变这些数据...... !!!

提前致谢

3 个答案:

答案 0 :(得分:1)

在您的情况下,插入后将Date转换为整数(37972)到DATETIME的一种可能性是使用dateadd。

将值插入VARCHAR类型列后运行以下查询。

 UPDATE YourTableName 
 SET ColumnWithVarcharType = CAST(DATEADD(d, 
      CAST(ColumnWithVarcharType AS INT), -2) AS VARCHAR(20))
 WHERE IsNumeric(ColumnWithVarcharType) = 1

以上查询将仅更新具有整数(37972)值的选定值。它不关心像'01 / 01/0001'这样的值。

SELECT DATEADD(d, 0, 0)   => 1/1/1900
SELECT DATEADD(d, 37972, -2)  => 12/17/2003

默认情况下,DB返回sql server中用于查询SELECT DATEADD(d, 0, 0)的初始日期。以同样的方式,您可以将37972添加到初始日期,如SELECT DATEADD(d, 37972, -2)

答案 1 :(得分:0)

尝试使用ISDATE function,它会告诉您给定日期是否为Valid or not

SELECT CASE
         WHEN Isdate('10/25/2001') = 1 THEN CONVERT(varchar(20), '10/25/2001',102 )
         ELSE NULL
       END 

答案 2 :(得分:0)

问题在于您的输入值:=> 01/01/0001

立即解决方法我建议将表格中的数据类型从日期时间更改为日期

select cast('01/01/0001' as date)
or
select convert(date,'01/01/0001')

输出:0001-01-01

select cast('01/01/0001' as datetime)
or
select convert(datetime,'01/01/0001')

输出:Msg 242,Level 16,State 3,Line 1
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。