【发布时间】:2013-10-10 23:33:08
【问题描述】:
MySQL中有没有类似PHP的函数substr_count()的函数?
实际上我需要知道一组中有多少项(例如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 的数量。我有这个值,但我想知道是否有本地方法可以做到这一点,或者比我做的成本更低。
【问题讨论】:
-
使用 CHAR_LENGTH 而不是 LENGTH。
-
如果您遇到此类问题,那么您选择了错误的数据类型和/或错误的架构设计。我建议您重新设计,而不是让自己复杂化这个问题。
-
@MostyMostacho 我必须存储一些数字来引用其他表的数据。我知道最好的方法是创建一个“表连接器”(用户、用户扇区、扇区)。但就我而言,它会变得更难工作。如何无法从该表中删除任何数据,因此我不需要为项目的这一步在它们之间设置 FK。但我感谢你的帮助。 :)
-
@DavidRodrigues 100,200 有 3 个项目如何?为什么1,2,3也有3个项目...矛盾,请解释,谢谢
-
我做了和你一样的把戏 b4 我认为它应该比这更好(一些原生函数等)......但我没有找到更好的东西。我需要它在包含仅整数数组的非 JSON 字段中。