SSIS摄入含前导空格的日期字符串转换及格式修正求助
解决SQL中带前导空白的日期字符串转换与格式化问题
问题根源
你的列中' 8/11/2022'开头的空白不是普通半角空格,大概率是全角空格、制表符或其他Unicode空白字符,导致直接替换普通空格无效,且转换日期时因空白干扰失败。
验证空白字符类型
先执行以下语句确认开头空白的ASCII编码:
SELECT ASCII(LEFT([date], 1)) FROM [Source].[TableName] s_p
- 普通半角空格:ASCII=32
- 全角空格:ASCII=12288
- 制表符:ASCII=9
解决方案
方案1:先清理空白转日期,再格式化输出(推荐)
先移除所有前导空白,将字符串转为date类型,再用FORMAT函数输出指定格式:
SELECT FORMAT(CONVERT(date, LTRIM([date]), 103), 'dd/MM/yyyy') AS FormattedDate FROM [Source].[TableName] s_p
LTRIM([date]):移除所有前导空白(兼容各类空白字符)CONVERT(date, ..., 103):按英国格式(dd/MM/yyyy)将字符串转为日期FORMAT(..., 'dd/MM/yyyy'):将日期格式化为两位日/两位月/四位年的字符串
方案2:直接处理字符串补全前导零
如果不需要转为日期类型,直接对字符串做处理:
SELECT STUFF( LTRIM([date]), 1, CHARINDEX('/', LTRIM([date])) - 1, RIGHT('0' + LEFT(LTRIM([date]), CHARINDEX('/', LTRIM([date])) - 1), 2) ) AS FormattedDate FROM [Source].[TableName] s_p
- 先移除前导空白,提取日部分并补前导零到两位,再替换回原字符串对应位置
方案3:针对特定空白字符替换
如果验证后确认是全角空格,直接替换全角空格为0:
SELECT REPLACE([date], N' ', '0') AS FormattedDate -- 引号内为全角空格 FROM [Source].[TableName] s_p
修复日期转换报错
执行以下语句即可正常转换日期:
SELECT CONVERT(date, LTRIM([date]), 103) FROM [Source].[TableName] s_p
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

