SQL Server中SSIS导入Flat File的日期转换错误修复及数据类型推荐
SSIS导入Flat File日期格式错误修复方案及数据类型推荐
错误原因
源文件日期格式为MM/DD/YY HH:MM:SS(示例:5/3/22 2:09:02 PM),但SSIS默认解析时将其识别为DD/MM/YY格式,导致月份和日期颠倒,最终导入SQL Server后变成2022-03-05 14:09:02,而非预期的2022-05-03 14:09:02。
修复方法
方法1:调整Flat File连接管理器的区域设置
- 打开Flat File连接管理器,切换到「高级」选项卡
- 找到目标日期时间列,将「区域设置」修改为英语(美国)(匹配源文件的MM/DD/YY格式规则)
- 确认列的「数据类型」设置为
DT_DBTIMESTAMP或DT_DATE
方法2:用派生列转换强制指定解析格式
如果区域设置调整无效,在数据流任务中添加「派生列」组件,使用格式字符串强制解析:
TO_DATE([原日期列], "MM/dd/yy hh:mm:ss tt")
MM对应两位月份,dd对应两位日期,tt匹配AM/PM标识- 将派生列的数据类型设置为
DT_DBTIMESTAMP,再将该列导入SQL Server
方法3:SQL Server端补救已错误导入的数据
如果数据已经错误写入表,可通过TRY_CONVERT函数重新修正:
UPDATE 你的表名 SET 目标日期列 = TRY_CONVERT(DATETIME, 错误日期列, 101) -- 101是SQL Server中MM/DD/YY的格式代码 WHERE TRY_CONVERT(DATETIME, 错误日期列, 101) IS NOT NULL
推荐数据类型
SSIS数据流阶段
使用DT_DBTIMESTAMP类型,能完整保留日期时间的秒级精度,且与SQL Server的日期类型完美兼容。
SQL Server数据库端
推荐使用DATETIME2类型:
- 精度最高可达7位小数(支持微秒级),比传统
DATETIME精度更高 - 日期范围更大(从0001-01-01到9999-12-31),兼容性更好
- 如果仅需秒级精度,
DATETIME也可满足需求,但DATETIME2是更优的现代化选择
内容的提问来源于stack exchange,提问作者Jana N
相关产品推荐
相关产品推荐

