Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL. Надо обрезать символы пробельной группы


homm ©   (2008-01-23 15:38:00) 

Я весь яндекс перерыл уже.
Делаю так:
TRIM(BOTH '\n\r\t ' FROM `weight`) = '95'
Получаю результат не тот, который ожидается. Вопрос: Проблема в этом выражении, или где то еще?


Johnmen   (2008-01-23 17:49:00) [1]


> homm ©   (23.01.08 17:25) [10]

Смотря что м.б. в поле weight.
Посмотри SUBSTRING, LOCATE, ...


homm   (2008-01-23 17:25:00) [2]

> [9] Johnmen ©   (23.01.08 17:16)
> Обрати внимание на четвертый пример.

Чьерт… Как же быть? Регекспом долго, нужно порядка 2к выборок.
Просто в PHP trim как раз выбирает все символы из списка, понадеялся что в mysql так же.


Johnmen   (2008-01-23 17:16:00) [3]


> homm ©   (23.01.08 17:10) [8]

Судя по справке, все неверно. Т.к. ищется префикс/суффикс ' \n\r\t'. А такого в значении нет. Есть ' \n\r'.
Обрати внимание на четвертый пример.


homm   (2008-01-23 17:10:00) [4]

> [6] Johnmen ©   (23.01.08 16:15)
> Насколько помню, это значит обрезать последовательность '\n\r\t '.

Да.

Вот выдержка из справки:
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
Возвращает строку str с удаленными всеми префиксами и/или суффиксами, указанными в remstr. Если не указан ни один из спецификаторов BOTH, LEADING или TRAILING, то подразумевается BOTH. Если аргумент remstr не задан, то удаляются пробелы:
mysql> SELECT TRIM(' bar ');
       -> 'bar'

mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
       -> 'barxxx'

mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
       -> 'bar'

mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
       -> 'barx'

Так что по идее все верно.


Правильный_Вася   (2008-01-23 16:31:00) [5]

udf напиши


Johnmen   (2008-01-23 16:15:00) [6]


> TRIM(BOTH '\n\r\t ' FROM `weight`) = '95'Получаю результат
> не тот, который ожидается.

Насколько помню, это значит обрезать последовательность ' \n\r\t'. Значит, таким способом желаемое не выйдет...


homm   (2008-01-23 15:59:00) [7]

> [3] KSergey ©   (23.01.08 15:55)
> А это что за база такая?

MySQL


> [4] ZoldBerger   (23.01.08 15:57)
> /*обрезание пробелов по бокам*/

Сабж прочти. «Пробельная группа» <> «один лишь пробел»


ZoldBerger   (2008-01-23 15:57:00) [8]

SELECT RTRIM(LTRIM(' <word>  '))

/*обрезание пробелов по бокам*/


KSergey   (2008-01-23 15:55:00) [9]

А это что за база такая?


homm   (2008-01-23 15:42:00) [10]

Все, ветка в базах.
Теперь ответ я получу только через неделю :(


homm   (2008-01-23 15:40:00) [11]

В частности Есть строка, в которой weightравно '95\n\r'. Она не находится приведенным выше выражением.


Наверх

Титульная страница Поиск, карта сайта Написать письмо