LTRIM不会删除SQL中的前导空格



我从文本文件加载数据,它似乎不包含前导空格,但是当我从表中选择时,我看到了前导空格,但无法使用LTRIM函数删除它:

SELECT ltrim(DATA) FROM MYTABLE WHERE LineNumber = 4

我得到以下信息:


T000000000004

在T 之前有一个单独的引导空间

当我做select convert(varbinary,data) from mytable时,我得到的是:

0x0A54303030303030303030303034

在文件中,它看起来不错:T000000000004-没有前导空格,它从文件中的第一个字符开始。但是,在表中插入了一个前导空格。

我该怎么修?

正如HABO所提到的,您的值不是以空格开头的,它实际上根本没有任何空白,它有一个前导换行符(字符10,或0X0A(。

要删除这些,以及您可能拥有的任何回车,您可以使用REPLACE:

REPLACE(REPLACE(data,CHAR(10),'')),CHAR(13),'')

(L/R)TRIM仅删除前导/尾随空白。没有别的。

如果可能有一系列前导字符,并且您希望删除所有前导字符,比如第一个字母数字字符,则可以使用PATINDEXSTUFF:

SELECT STUFF(V.[data],1,PATINDEX('%[A-z1-9]%',V.[data])-1,'')
FROM (VALUES(CHAR(10) + CHAR(13) + '  -T000000129B'))V([data])

最新更新