Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить количество вхождений символа в строке? mysql 5 
V
    Опции темы
zammar
Дата 27.2.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 289
Регистрация: 30.10.2008

Репутация: нет
Всего: нет



Значит есть поле в таблице. Пусть будет типа TEXT, вида: "0001 0002 0003 0004 0005".

Можно ли получить средствами sql количество пробелов в этой строке? Что-то типа php-ой функции substr_count?
PM   Вверх
LSD
Дата 27.2.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: нет
Всего: 538




M
LSD
Перенесено из баз данных



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 27.2.2010, 12:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(zammar @  27.2.2010,  12:17 Найти цитируемый пост)
количество пробелов в этой строке


Код

length(str)-length(replace(str,' '))


Это сообщение отредактировал(а) Zloxa - 27.2.2010, 13:00


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 27.2.2010, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Код

delimiter //
create function substr_count (str text, sbstr text)
returns integer
begin
declare cnt integer;
declare cpos integer;
set cnt = 0;
set cpos = 1;
while locate(sbstr,str,cpos) > 0 do
set cnt = cnt + 1;
set cpos = 1 + locate(sbstr,str,cpos);
end while;
return cnt;
end //
delimiter ;



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 27.2.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Akina, locate дважды - некошерно както smile)
увы не знаю тонкостей языка, леплю по образу и подобию, сорри, если коряво:
Код

delimiter //
create function substr_count (str text, sbstr text)
returns integer
begin
declare cnt integer;
declare cpos integer;
declare lr integer;
set cnt = 0;
set cpos = 1;
while 1=1 do
  set lr = locate(sbstr,str,cpos) 
  if lr = 0  or lr is null then 
    return cnt; 
  end if;
  set cnt = cnt + 1;
  set cpos = 1 + lr;
end while;
end //
delimiter ;



Это сообщение отредактировал(а) Zloxa - 27.2.2010, 13:17


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
zammar
Дата 27.2.2010, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 289
Регистрация: 30.10.2008

Репутация: нет
Всего: нет



Хранимые процедуры для моего случая не подходят слишком громоздко.
А что касается этого:
Код

length(str)-length(replace(str,' '))

в этом виде кол-во пробелов всегда 0.

А так:
Код

length(replace(str,' ', ' '))


Работает, но криво считает.

Но в принципе понял куда копать. Специальной функции для этого видимо нету.
Спасибо!!!


PM   Вверх
Akina
Дата 27.2.2010, 14:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  27.2.2010,  14:15 Найти цитируемый пост)
locate дважды - некошерно както 

Ну это так, с лёту написано. И поправить элементарно. Лень было вспоминать, в какой из БД эта функция у меня валяется smile... на самом деле у меня в ней ещё и флаг для перекающихся вхождений предусмотрен.

Цитата(zammar @  27.2.2010,  14:26 Найти цитируемый пост)
в этом виде кол-во пробелов всегда 0.

Код

length(str)-length(replace(str,' ',''))



Это сообщение отредактировал(а) Akina - 27.2.2010, 14:32


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.