Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 LTRIM работает както не так ...  [new]
dVirt
Member

Откуда:
Сообщений: 388
Добрый день!

Селектом возвращается HTML текст, примерно такой:

'  <P><STRONG>Продолжительность:</STRONG> 102 мин. '

Я пытаюсь убрать пустые символы в начале строки функцией LTRIM - ничего не меняется как будто функция не работает!

Вот:
SELECT LTRIM(Html) AS TrimHtml FROM MainTable

Что там за пустые символы такие, понятия не имею, может быть коды 10/13 ...
Но ведь в документации сказано не про пробелы а именно про пустые сомволы "Returns a character expression after it removes leading blanks." ...
7 авг 09, 10:55    [7509533]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
blank = пробел..
select ascii(' ')
select ascii(left('  <P><STRONG>Продолжительность:</STRONG> 102 мин. ', 1))

для спящего время бодрствования равносильно сну
7 авг 09, 10:57    [7509543]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
ещё и в навороченных нотепадов можно смотреть код символа....


----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 11:00    [7509566]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
dVirt
Member

Откуда:
Сообщений: 388
Алексей2003
blank = пробел..
select ascii(' ')
select ascii(left('  <P><STRONG>Продолжительность:</STRONG> 102 мин. ', 1))

для спящего время бодрствования равносильно сну


Посмотрел, и точно, первый символ - 13, второй - 10 ...
Да теория об этих кодах подтвердилась, а проблема не решилась ...

Есть ли функция, которая удалит пустое пространство?
7 авг 09, 11:02    [7509580]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Glory
Member

Откуда:
Сообщений: 104760
"leading blanks" - это ведущие пробелы, а не пустые символы. Тем более, что они правильно такие символы называются вовсе не пустые, а неотображаемые.
7 авг 09, 11:03    [7509593]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Glory
Member

Откуда:
Сообщений: 104760
dVirt


Есть ли функция, которая удалит пустое пространство?

Изучить другие функции TSQL. REPLACE, например
7 авг 09, 11:04    [7509599]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
select replace(replace(@str, char(10)), char(13))

для спящего время бодрствования равносильно сну
7 авг 09, 11:05    [7509606]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
iljy
Member

Откуда:
Сообщений: 8711
Алексей2003
select replace(replace(@str, char(10)), char(13))


насколько я понимаю - автор хочет удалить НАЧАЛЬНЫЕ пустые символы, а вы предлагаете удалить все. это немножко разные вещи.

dVirt,
определитесь, что для вас есть пустые символы, а потом можно попробовать найти решение.
7 авг 09, 11:11    [7509648]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
начальные символы лучше проверять до вставки и обрезать на клиенте или в триггере..

для спящего время бодрствования равносильно сну
7 авг 09, 11:14    [7509672]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
iljy
Member

Откуда:
Сообщений: 8711
dVirt,

вот пример удаления:
declare @s varchar(50)
set @s = char(10) + char(13) + ' adf'

select substring(@s, (select top 1 Number from master..spt_values
	                  where type = 'P' and Number between 1 and len(@s)
			and substring(@s, Number,1) not in (char(10), char(13), ' ')
					 ), len(@s))
7 авг 09, 11:18    [7509695]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
iljy
Member

Откуда:
Сообщений: 8711
Алексей2003
начальные символы лучше проверять до вставки и обрезать на клиенте или в триггере..


а если они несут информмацию? И в одних случаях их надо выдавать, а в других нет? Я бы не был столь категоричен пока не известны все условия задачи. Хотя конечно во многих случаях вы правы.
7 авг 09, 11:20    [7509709]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Алексей2003
начальные символы лучше проверять до вставки и обрезать на клиенте или в триггере..

для спящего время бодрствования равносильно сну


+1 и не будет потребность лишней задачи...
7 авг 09, 11:23    [7509732]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
dVirt
Member

Откуда:
Сообщений: 388
Ramin
Алексей2003
начальные символы лучше проверять до вставки и обрезать на клиенте или в триггере..

для спящего время бодрствования равносильно сну


+1 и не будет потребность лишней задачи...


Полностью согласен!

Моя софтина так и делает, но до того как она начала это делать в базе накопилось ~125000 записей ...

И их теперь нужно свести к подобаемому виду прямо в базе, тоесть удалить начальные и оконечные невидимые символы ...
7 авг 09, 11:29    [7509790]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
измени сперва все эти символы на пустоту потом убери с LTRIM - ом....

----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 11:37    [7509858]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
dVirt
Алексей2003
blank = пробел..
select ascii(' ')
select ascii(left('  <P><STRONG>Продолжительность:</STRONG> 102 мин. ', 1))

для спящего время бодрствования равносильно сну


Посмотрел, и точно, первый символ - 13, второй - 10 ...
Да теория об этих кодах подтвердилась, а проблема не решилась ...

Есть ли функция, которая удалит пустое пространство?
DECLARE @Blanks VARCHAR(100);
SET @Blanks=' '+CHAR(9)+CHAR(10)+CHAR(13);
SELECT STUFF('  <P><STRONG>Продолжительность:</STRONG> 102 мин. ',1, PATINDEX('%[^'+@Blanks+']%','  <P><STRONG>Продолжительность:</STRONG> 102 мин. ')-1,'');
7 авг 09, 11:41    [7509905]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
dVirt

Моя софтина так и делает, но до того как она начала это делать в базе накопилось ~125000 записей ...

И их теперь нужно свести к подобаемому виду прямо в базе, тоесть удалить начальные и оконечные невидимые символы ...

Пробелы и CRLF ничего не значат для HTML они игнорируются.
7 авг 09, 11:46    [7509970]     Ответить | Цитировать Сообщить модератору
 Re: LTRIM работает както не так ...  [new]
dVirt
Member

Откуда:
Сообщений: 388
Всем спасибо за примеры - помогло ...
Данные в базе - сконвертировал. :)
7 авг 09, 11:58    [7510098]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить