Sql server 导入日期列以错误结束

Sql server 导入日期列以错误结束,sql-server,sql-server-2008,ssms,Sql Server,Sql Server 2008,Ssms,当我在ssms导入/导出向导中尝试上载包含数据类型为date的日期字段的平面文件时,会抛出如下错误 从字符串转换日期和/或时间时转换失败 平面文件中的实际数据 Period 12/17/2003 01/01/0001 10/25/2001 01/01/0001 请帮助我如何上传这些日期。。。。。我知道包含“01/01/0001”的文件中存在错误,但这是业务逻辑,我无法更改这些数据 提前感谢尝试使用ISDATE函数,该函数将告诉您给定的日期是否有效 SELECT CASE

当我在ssms导入/导出向导中尝试上载包含数据类型为
date
的日期字段的平面文件时,会抛出如下错误

从字符串转换日期和/或时间时转换失败

平面文件中的实际数据

  Period
12/17/2003
01/01/0001
10/25/2001
01/01/0001
请帮助我如何上传这些日期。。。。。我知道包含“01/01/0001”的文件中存在错误,但这是业务逻辑,我无法更改这些数据


提前感谢

尝试使用
ISDATE函数
,该函数将告诉您给定的日期是否有效

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

在您的例子中,插入后将整数(37972)中的日期转换为DATETIME的一种可能性是使用dateadd

将值插入VARCHAR type列后,运行下面的查询

 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中用于查询的初始日期
选择DATEADD(d,0,0)
。同样,您可以将37972添加到初始日期,如
选择DATEADD(d,37972,-2)

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

select cast('01/01/0001' as date)
or
select convert(date,'01/01/0001')
我建议立即解决的办法是将表中的数据类型从datetime更改为date

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')
输出:味精242,16级,状态3,第1行

将varchar数据类型转换为datetime数据类型会导致值超出范围。

此数据出现时,您需要什么。您只需首先更改数据类型varchar并导入它,然后将有问题的值更改为null,最后将数据类型更改为datetime。但是,当我尝试导入这些值时,varchar 01/01/0001存储区保持不变,但其他日期的存储方式如下。。。。对于
12/17/2003
它存储为
37972
以后我无法将其更改为
Date
数据类型您可以将37972更改为12/17/2003。查看我的答案并更新您的状态。上面提到的是我必须维护这些格式的实际日期。这是我们的clients@CIPHER-现在已修改检查。但当我尝试导入这些值时,varchar 01/01/0001存储区保持不变,但其他日期存储如下。。。。对于2003年12月17日,它存储为37972,以后我无法将其更改为最新数据类型…请给出一些方法将这些37972 varchar转换为date@CIPHER-因此,您需要将
01/01/0001
此日期插入日期列我的案例不是通过查询窗口插入
01/01/0001
,我正在尝试通过平面文件导入…它抛出当我尝试使用
date
数据类型导入时,以及当我尝试使用varchar导入时,上述错误实际日期会像上面的注释一样进行转换。我尝试了更新查询,但它在关键字“TABLE”附近抛出了此错误-
错误语法。更新您的TableName SET ColumnWithvarchartType=DATEADD(d,ColumnWithVarChartType,-2),其中为数值型(ColumnWithVarChartType)=1Already I removed')。再次检查查询。更新您的TableName集ColumnWithVarChartType=DATEADD(d,ColumnWithVarChartType,-2),其中IsNumeric(ColumnWithVarChartType)=1已找到答案。实际上,当我尝试更新查询时,它仍然显示相同的错误,
DATEADD
方法对某些值给出了不正确的结果(结果另外显示两天)。我的意思是25分显示27分。。