LTRIM 不会删除 SQL 中的前导 space
LTRIM does not remove leading space in SQL
我从文本文件加载数据,它似乎不包含前导 space,但是当我从 table SELECT 时,我看到前导 [=31] =] 但不能用 LTRIM
函数删除它:
SELECT ltrim(DATA) FROM MYTABLE WHERE LineNumber = 4
我得到以下信息:
T000000000004
在 T
之前有一个前导 space
当我执行 select convert(varbinary,data) from mytable
时,这就是我得到的:
0x0A54303030303030303030303034
在文件中它看起来没问题:T000000000004
- 没有前导 space 并且它从文件中的第一个字符开始。但是,在 table 中它插入了前导 space.
我该如何解决?
正如 HABO 提到的,您的值不是以 space 开头,它实际上根本没有任何白色 space,它有一个前导换行符(字符 10 , 或 0X0A
).
要删除这些以及您可能也有的任何回车 returns,您可以使用 REPLACE
:
REPLACE(REPLACE(data,CHAR(10),'')),CHAR(13),'')
(L/R)TRIM
只去掉leading/trailing白色space。没有别的。
如果可能有一系列前导字符,并且您想删除所有前导字符,直到说出第一个字母数字字符,您可以使用 PATINDEX
和 STUFF
:
SELECT STUFF(V.[data],1,PATINDEX('%[A-z1-9]%',V.[data])-1,'')
FROM (VALUES(CHAR(10) + CHAR(13) + ' -T000000129B'))V([data])
我从文本文件加载数据,它似乎不包含前导 space,但是当我从 table SELECT 时,我看到前导 [=31] =] 但不能用 LTRIM
函数删除它:
SELECT ltrim(DATA) FROM MYTABLE WHERE LineNumber = 4
我得到以下信息:
T000000000004
在 T
之前有一个前导 space当我执行 select convert(varbinary,data) from mytable
时,这就是我得到的:
0x0A54303030303030303030303034
在文件中它看起来没问题:T000000000004
- 没有前导 space 并且它从文件中的第一个字符开始。但是,在 table 中它插入了前导 space.
我该如何解决?
正如 HABO 提到的,您的值不是以 space 开头,它实际上根本没有任何白色 space,它有一个前导换行符(字符 10 , 或 0X0A
).
要删除这些以及您可能也有的任何回车 returns,您可以使用 REPLACE
:
REPLACE(REPLACE(data,CHAR(10),'')),CHAR(13),'')
(L/R)TRIM
只去掉leading/trailing白色space。没有别的。
如果可能有一系列前导字符,并且您想删除所有前导字符,直到说出第一个字母数字字符,您可以使用 PATINDEX
和 STUFF
:
SELECT STUFF(V.[data],1,PATINDEX('%[A-z1-9]%',V.[data])-1,'')
FROM (VALUES(CHAR(10) + CHAR(13) + ' -T000000129B'))V([data])