2

substr_count()MySQL中是否有任何类似于PHP功能的功能?实际上我需要知道一组中有多少个项目(例如1,2,33 个项目)。

在搜索中,我没有发现任何与此有关的东西。所以我用方法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的数字。我有这个值,但我想知道是否有本地方法可以做到这一点,或者比我做的成本更低。

4

2 回答 2

2

没有任何本机功能,您可以执行此操作。但是为了减轻一些痛苦并隐藏查询中的复杂性,您可以创建处理NULLs、空字符串等的 on 函数。

像这样的东西

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;

样本输出:

| 身份证 | NUMBER_OF_VALUES |
|----|------------------|
| 1 | 3 |
| 2 | 2 |
| 3 | 6 |
| 4 | 0 |
| 5 | 0 |

这是SQLFiddle演示

于 2013-10-04T06:02:43.507 回答
1

这可能会奏效

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

查询与 char_length 一起工作得非常好!

字符长度:7(即使为 0 也可以)

于 2013-10-04T04:35:19.747 回答