LTRIM не удаляет начальные пробелы в SQL - PullRequest
0 голосов
/ 25 марта 2020

Я загружаю данные из текстового файла, и кажется, что он не содержит начальный пробел, однако, когда я ВЫБИРАЮ из таблицы, я вижу начальный пробел, но не могу удалить их с помощью функции LTRIM:

SELECT ltrim(DATA) FROM MYTABLE WHERE LineNumber = 4

Я получаю следующее:


T000000000004

с одним пробелом перед T

Когда я делаю select convert(varbinary,data) from mytable, я получаю:

0x0A54303030303030303030303034

В файле все выглядит нормально: T000000000004 - без начального пробела, и оно начинается с первого символа в файле. Однако в таблице он вставлен с начальным пробелом.

Как это исправить?

1 Ответ

1 голос
/ 25 марта 2020

Как упоминалось в HABO, ваше значение начинается не с пробела, на самом деле в нем вообще нет пробелов, у него ведущий перевод строки (символ 10 или 0X0A).

Чтобы удалить их и любые возвраты каретки, которые у вас могут быть, вы можете использовать REPLACE:

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

(L/R)TRIM только для удаления пробелов в начале / в конце. Ничего другого.

Если может быть диапазон ведущих символов, и вы хотите удалить все из них, например, первый буквенно-цифровой символ, вы можете использовать PATINDEX и STUFF:

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