SQL Server存储过程返回数据含特殊空白,如何清除?
解决SQL返回数据中的空终止符及多余空白问题
问题根源
你看到的\0是ASCII码为0的空终止字符,SQL自带的LTRIM和RTRIM只处理普通空格(ASCII 32),对这种空字符完全无效,这就是为什么你处理后仍有异常内容。CSV里显示的DABBY |MILLER |,除了空字符,还可能残留未被修剪的首尾空格。
方法一:从SQL存储过程源头处理
修改字段的处理逻辑,先替换空终止符,再修剪首尾空格:
LTRIM(RTRIM(REPLACE([FNAME], CHAR(0), ''))) AS [FNAME]
CHAR(0)对应空终止符,用REPLACE把它彻底清空,再通过LTRIM/RTRIM处理普通空格,从根源解决数据脏的问题。
方法二:在C#应用层处理
如果没法修改SQL逻辑,就在读取数据后做清洗:
单字段处理
// 先修剪首尾空格,再移除所有空终止符 string cleanedName = rawName?.Trim().Replace("\0", string.Empty);
批量处理IEnumerable数据
假设你的数据实体是UserInfo,包含FNAME字段:
var cleanedList = rawData.Select(u => new UserInfo { FNAME = u.FNAME?.Trim().Replace("\0", string.Empty), // 其他需要处理的字段同理操作 });
CSV写入注意事项
写入CSV时,确保分隔符是纯|,不要加额外空格,比如用String.Join("|", cleanedFields),避免人为引入间隙。
额外扩展:处理其他不可见空白
如果还存在制表符、换行符这类特殊空白,可进一步扩展处理:
// 移除所有空白类字符+空终止符 var cleanedStr = new string(rawStr?.Where(c => !char.IsWhiteSpace(c) && c != '\0').ToArray()); // 仅清除首尾的所有空白+空字符,保留中间正常空格 var cleanedStr = rawStr?.Trim().Replace("\0", string.Empty);
内容的提问来源于stack exchange,提问作者SilverFish
相关产品推荐
相关产品推荐

