MySQL native похож на PHP substr_count ()

Есть ли какая-нибудь функция в MySQL, которая похожа на функцию substr_count() PHP? На самом деле мне нужно знать, сколько элементов в наборе (например, 1,2,3 – 3 элемента).

В поиске я не нашел ничего, что было бы родным для этого. Поэтому я сделал обход с методами LENGTH() и REPLACE() .

 SELECT LENGTH("1,2,3,4") - LENGTH(REPLACE("1,2,3,4", ",", "")) + 1; 

Но он не установлен, пуст.
Но я могу решить это с помощью простого IF() .

Итак, я ищу еще несколько родных, например, например:

 SELECT SUBSTR_COUNT(",", "1,2,3,4") + 1; 

Или, еще лучше:

 SELECT LENGTH_OF_SET("1,2,3,4"); 

Некоторые ребята решения?

редактировать

Из-за некоторых сомнений я попытаюсь привести несколько примеров:

  • 1,2,3 имеет 3 предмета: 1, 2 и 3;
  • 100 200 имеет 2 предмета: 100 и 200;
  • 1,2,4,9,16,25 – 6 предметов: 1, 2, 4, 9, 16 и 25;

В принципе, я хочу, чтобы число было числом запятых + 1 . У меня есть это значение, но мне было интересно, есть ли у него собственный способ сделать это, или дешевле, чем я.

Для этого нет никакой нативной функции, и что вы делаете, это нормально. Но чтобы облегчить боль и скрыть сложность в ваших запросах, вы можете создать свою функцию, которая заботится о NULL , пустых строках и т. Д.

Что-то вроде этого

 CREATE FUNCTION SUBSTR_COUNT ( _delimiter VARCHAR(12), _value VARCHAR(255) ) RETURNS INT RETURN COALESCE( CHAR_LENGTH(NULLIF(_value, '')) - CHAR_LENGTH(REPLACE(NULLIF(_value, ''), COALESCE(_delimiter, ','), '')) + 1, 0); 

И наслаждайтесь им

 SELECT id, SUBSTR_COUNT(',', value_set) number_of_values FROM table1; SELECT id, SUBSTR_COUNT(NULL, value_set) number_of_values FROM table1; 

Пример вывода:

 |  ID |  NUMBER_OF_VALUES |
 | ---- | ------------------ |
 |  1 |  3 |
 |  2 |  2 |
 |  3 |  6 |
 |  4 |  0 |
 |  5 |  0 |

Вот демоверсия SQLFiddle

Это может сделать трюк

 select char_length(REPLACE('1,2,3,4', ',', '')); or select char_length(REPLACE("1,2,3,4", ",", "")); 

LENGTH () возвращает длину строки, измеренную в байтах.

CHAR_LENGTH () возвращает длину строки, измеренную в символах.

CHARACTER_LENGTH () является синонимом CHAR_LENGTH ().

 select char_length(REPLACE('10,2000,3',',','')) from tableName LIMIT 1 

Query отлично работает с char_length!

char length: 7 (даже если с 0 счет в порядке)