当我尝试在ssms导入/导出向导中上传包含数据类型为DATE
的日期字段的flatfile时,会抛出如下错误
从字符串
转换日期和/或时间时转换失败
平面文件中的实际数据
Period
12/17/2003
01/01/0001
10/25/2001
01/01/0001
请帮助我如何上传这些日期.....我知道错误在于包含&01,01 / 01/0001'但是业务逻辑我无法改变这些数据...... !!!
提前致谢
答案 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数据类型转换为日期时间数据类型会导致超出范围的值。