SQL 如何澄清字符串中的奇怪字符

SQL How clarify a weird char in a string

我从文件源中抓取了一个 DATE 列,该列在 NVARCHAR(50) 暂存字段中不超过 8 个字符。现在,当我尝试将其转换为 DATE 时,它失败了,因为 SQL 无法应用转换。

我试图更深入地了解发生了什么,并查看了长度。在值得注意的事情中,我意识到 len 始终为 9,并且在 VARBINARY 00D00 的末尾。我手动添加了一个新行,假设该字段和 len 符合我的预期。

代码:

SELECT  [LastPriceChange],len([LastPriceChange]), 
convert(varbinary(max),[LastPriceChange])
FROM  [STAGING].[MBEW]
group by [LastPriceChange]
order by 2 desc

输出:

我试图让最后一部分理解 00D00 的想法是什么,但是当我尝试时:

SELECT REPLICATE(NCHAR(000D00), 5 COLLATE Latin1_General_100_BIN2)

它没有通过,有人知道我该如何解决吗?

谢谢

0x0D是马车return'\r',(char)13。只需使用 SUBSTRING(LastPriceChange, 0, 8) 即可摆脱它。

可能是您以 Unix 格式读取文件,期望只有 '\n'(换行符,(char)10)作为行分隔符,而不是 "\r\n"(回车符 return + 新行)像往常一样在 Windows?这可以解释为什么 0x0D 被遗留下来。

参见:ASCII, Control characters(维基百科)。