Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL本机类似于PHP substr_count()_Php_Mysql - Fatal编程技术网

MySQL本机类似于PHP substr_count()

MySQL本机类似于PHP substr_count(),php,mysql,Php,Mysql,MySQL中是否有类似PHP的函数substr\u count()? 实际上,我需要知道一组中有多少项(例如,1,2,3is 3项) 在一次搜索中,我没有发现任何与此相关的内容。因此,我使用方法LENGTH()和REPLACE()进行了变通 但它的失败集为空。 但是我可以用一个简单的IF()来解决这个问题 所以,我正在寻找一些更为本土的,比如: SELECT SUBSTR_COUNT(",", "1,2,3,4") + 1; 或者,更好的是: SELECT LENGTH_OF_SET("1,2

MySQL中是否有类似PHP的函数
substr\u count()
? 实际上,我需要知道一组中有多少项(例如,
1,2,3
is 3项)

在一次搜索中,我没有发现任何与此相关的内容。因此,我使用方法
LENGTH()
REPLACE()
进行了变通

但它的失败集为空。
但是我可以用一个简单的
IF()
来解决这个问题

所以,我正在寻找一些更为本土的,比如:

SELECT SUBSTR_COUNT(",", "1,2,3,4") + 1;
或者,更好的是:

SELECT LENGTH_OF_SET("1,2,3,4");
一些解决方案的家伙

编辑

由于一些疑问,我将尝试举一些例子:

  • 1,2,3
    有3项:1、2和3
  • 100200
    有两项:100和200
  • 1,2,4,9,16,25
    共有6项:1,2,4,9,16和25

基本上,我想要的数字是逗号+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()的同义词

查询在char_长度上工作得非常好

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


没有任何本机函数,您所做的一切都可以。但是为了减轻一些痛苦并隐藏查询的复杂性,您可以创建on函数来处理
NULL
s、空字符串等

像这样的

CREATE FUNCTION SUBSTR\u COUNT
(
_分隔符VARCHAR(12),
_VARCHAR值(255)
)返回整数
返回合并(
字符长度(NULLIF(_值,'))
-字符长度(替换(NULLIF(_值“”),合并(_分隔符“”,'),“”))
+ 1,
0);
然后享受它

选择id,SUBSTR\u COUNT(',',value\u set)值的个数
来自表1;
选择id、SUBSTR\u COUNT(NULL、value\u set)值的个数
来自表1;
样本输出:

| ID | NUMBER_OF_VALUES | |----|------------------| | 1 | 3 | | 2 | 2 | | 3 | 6 | | 4 | 0 | | 5 | 0 | |ID |值的数量| |----|------------------| | 1 | 3 | | 2 | 2 | | 3 | 6 | | 4 | 0 | | 5 | 0 |
这里有一个演示

这不就是只适用于
9
?i、 e.
“9,10”
将给出3而不是预期的2。@MartyWallace 9的意思是?我可能误解了这个问题。我以为OP想知道如果你在
@MartyWallace拆分有多少个项目不,我想它会工作得很好,因为替换是在',FayeqAliKhan是对的。我想做一些类似于
count(split(“,”,$setData))
的事情,因此,在
9,10
中,计数被替换的数据将计数3而不是2,或者在
100200
中计数6而不是2。使用CHAR\u LENGTH而不是LENGTH。如果您遇到这种问题,那么您选择了错误的数据类型和/或错误的架构设计。我建议您重新设计,而不是让自己的问题变得复杂。@MostyMostacho我必须存储一些数字以引用其他表的数据。我知道最好的方法是创建一个“表连接器”(用户、用户扇区、扇区)。但就我而言,工作会变得更加困难。没有一个数据可以从这个表中删除,所以我不需要为项目的这个步骤在它们之间设置FK。但我感谢你的帮助@DavidRodrigues 100200有3项如何?为什么1,2,3也有3个项目。。。矛盾,请解释,谢谢。我做的和你做的完全一样。我认为应该比这更好(一些本地函数,等等)。。。但我没有找到更好的。我在非JSON字段中需要它,该字段只包含整数数组。
select char_length(REPLACE('10,2000,3',',','')) from tableName LIMIT 1
| ID | NUMBER_OF_VALUES | |----|------------------| | 1 | 3 | | 2 | 2 | | 3 | 6 | | 4 | 0 | | 5 | 0 |