使用SSIS转换日期时间:TXT导入SQL日期格式报错求助
解决SSIS导入TXT日期格式转换报错的方法
问题本质
报错核心是源文件中Feb 24 2023 9:35AM这类日期格式无法被SSIS默认转换逻辑识别,且连接管理器提前设置类型无效,需先以字符串读取日期,再做自定义转换。
具体解决步骤
1. 确保源数据正确读取为字符串
- 在平面文件连接管理器中,将
Action_date列的数据类型设为string [DT_STR],长度设为20以上(避免字符串截断),确保任务能完整读取日期文本,不会在读取阶段失败。
2. 用派生列或脚本组件做自定义转换
方法一:派生列组件
添加派生列组件,新增列(如Converted_ActionDate),使用以下表达式转换:
(DT_DBTIMESTAMP)(SUBSTRING(Action_date, 5, 2) + "/" + SUBSTRING(Action_date, 1, 3) + "/" + SUBSTRING(Action_date, 8, 4) + " " + SUBSTRING(Action_date, 13, LEN(Action_date) - 12))
方法二:脚本组件(更灵活)
- 脚本组件中选择
Action_date作为输入列,新增输出列Converted_ActionDate,类型设为DT_DBTIMESTAMP - 在脚本编辑器的输入处理代码中添加:
DateTime parsedDate; if (DateTime.TryParseExact(Row.ActionDate, "MMM dd yyyy h:mmtt", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out parsedDate)) { Row.ConvertedActionDate = parsedDate; } else { // 处理转换失败的情况,比如设为NULL Row.ConvertedActionDate_IsNull = true; }
3. 映射到目标表
将转换后的Converted_ActionDate列映射到SQL表的datetime类型目标列,导入后日期会自动转为2023-02-24 09:35:00.000这类格式。
额外注意
- 若源日期的空格数量不固定,脚本组件的
TryParseExact更可靠,格式字符串里的h可匹配1-2个空格 - 可在脚本中添加错误处理,避免单个无效日期导致整个任务失败
内容的提问来源于stack exchange,提问作者Don
相关产品推荐
相关产品推荐

