Excel表经SSIS导入SQL Server,移除TEXT列空行多余换行
处理Excel文本列多余换行的两种方案
方案1:SSIS加载过程中处理
派生列组件快速替换
Excel中Alt+Enter生成的换行符为\r\n,可通过嵌套REPLACE函数批量清理连续换行:
在派生列中创建新列(或覆盖原列),使用表达式:
REPLACE(REPLACE(TEXT, "\r\n\r\n", "\r\n"), "\r\n\r\n", "\r\n")
多次嵌套是为了处理3个及以上的连续换行(第一次将3个替换为2个,第二次替换为1个)。
脚本组件灵活处理
如果需要更精准的过滤(比如同时清理空行的前后空格),添加脚本组件,用C#编写逻辑:
// 假设输入列名为TextCol,输出列名为CleanedText string rawText = Row.TextCol; // 替换所有连续换行为单个换行 string cleaned = System.Text.RegularExpressions.Regex.Replace(rawText, @"(\r\n)+", "\r\n"); // 移除首尾可能的空换行 Row.CleanedText = cleaned.Trim('\r', '\n');
方案2:加载到SQL Server后处理
批量替换连续换行
针对已入库的数据,使用SQL语句直接更新:
UPDATE YourTableName SET [TEXT] = REPLACE(REPLACE([TEXT], CHAR(13)+CHAR(10)+CHAR(13)+CHAR(10), CHAR(13)+CHAR(10)), CHAR(13)+CHAR(10)+CHAR(13)+CHAR(10), CHAR(13)+CHAR(10)) WHERE [TEXT] LIKE '%' + CHAR(13)+CHAR(10)+CHAR(13)+CHAR(10) + '%'
注:CHAR(13)对应回车,CHAR(10)对应换行,是SQL Server中存储的换行符格式。
拆分过滤后重新拼接(SQL Server 2016+)
如果存在大量空行(包含空格的空行),可拆分文本后过滤空内容再拼接:
UPDATE t SET [TEXT] = STRING_AGG(LTRIM(RTRIM(s.value)), CHAR(13)+CHAR(10)) FROM YourTableName t CROSS APPLY STRING_SPLIT(t.[TEXT], CHAR(13)+CHAR(10)) s WHERE LTRIM(RTRIM(s.value)) <> '' GROUP BY t.ID, t.NAME
内容的提问来源于stack exchange,提问作者HEV
相关产品推荐
相关产品推荐

