14 января 2009 г. MySQL

MySQL. Количество вхождений подстроки в строку

mysql-substr-count_green

Моему другу понадобилось подсчитать с помощью MySQL число вхождений подстрок в строке, так как подобной функции в MySQL не имеется, то я составил свой запрос.

По функциональности это аналог PHP функции substr_count.

Итак, рассмотрим реализацию на примере исходных данных моего друга:

  • "(1)(29)(330)" - допустим строка в выборке;
  • ")" - используемый нами разделитель.
select
  (char_length('(1)(29)(330)') - char_length(replace('(1)(29)(330)',')','')))
div
  char_length(')');
  1. Тут все элементарно, вычисляется разность между количеством символов целой строки
    char_length('(1)(29)(330)')
    и количеством символов строки, у которой заменен на пустоту - наш разделитель
    replace('(1)(29)(330)',')','')

  2. Считаем количество символов нашего разделителя
    char_length(')')

Потом вычисляется целочисленный остаток от деления (1) на (2).

В результате мы получим число "3".

Комментарии

Я, хоть и не ваш постоянный читатель, но всё же выскажу свое мнение. На ваш сайт попал практически случайно. Однако узнал много чего нового и интересного. Так что, как говорится, ПЕШЫ ИСЧО :)

А можно ли использовать подобный метод для массива с перечислением символов?

Что? Подробнее...

Можно ли как-то составить запрос, который определит входят ли элементы массива в строку поля?
Задача:
Хочу выбрать роботов из строки useragent:
есть строки в таблице:
1. Yandex/1.01.001 (compatible; Win16; m)
2. Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
3. Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 WebMoney Advisor

имеется массив с именами ботов (Yandex,Googlebot)
Как выбрать SQL запросом первые 2 строки?

Алексей 9 июля 2010 г. 12:03

Молодцом! и чего только не придумает изощренный мозг программера)

Спасибо огромное! Требовалось найти число символов в строке на mysql, это то что надо.

Спасибо! Элегантно :-)

Чувак, ты гений! Плюс плюс плюс!

Если придумал сам, а не нашол в интернете, присоеденяюсь к Ать.
Даже в избранное сайт добавлю, посмотрю детальнее Ваш ресурс)

Спасибо, применил! :)

Изящное решение. Аплодисменты!

Оставьте свой комментарий

Markdown