MySQL本机类似于PHP substr_count()
MySQL中是否有类似PHP的函数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
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");
一些解决方案的家伙
编辑
由于一些疑问,我将尝试举一些例子:
有3项:1、2和3李>1,2,3
有两项:100和200李>100200
共有6项:1,2,4,9,16和25李>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 |