Есть ли какая-нибудь функция в 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; 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 счет в порядке)