SQL如何澄清字符串

时间:2018-02-02 15:52:04

标签: sql sql-server sql-server-2008 etl chars

我从文件源中抓取了一个列,该列假设在一个NVARCHAR(50)暂存字段中的DATE不超过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

输出:

enter image description here

我正在努力让最后一部分了解 00D00 的想法,但是当我尝试时:

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

它没有通过,有人知道我应该如何理解它?

感谢

1 个答案:

答案 0 :(得分:0)

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

是否可以将该文件作为Unix格式读取,只希望'\n'(新行字符,(char)10)作为行分隔符而不是"\r\n"(回车+新行)像往常一样在Windows?这可以解释为什么遗留0x0D

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