我有一个字符串,例如'p2p3p4p9c5c6c7'
我想在mysql中创建一个select语句,它返回初始字符串中包含的字符串('p6','p7','p8' or 'p9')
中有多少。
我的例子的结果应该是1,因为只有' p9'包含在我的字符串中。
我找不到一个很好的方法来做到这一点。有人可以帮忙吗?
'k2p4p6p8p9c8'
结果应该在这里3
答案 0 :(得分:2)
您的数据格式似乎很差。如果要存储事物列表,请使用联结表。
然而,我能想到的最佳答案是一组加在一起的条件:
select ((str like '%p6%') +
(str like '%p7%') +
(str like '%p8%') +
(str like '%p9%')
) as NumInString
MySQL将布尔值视为数字上下文中的整数,其中“1”表示true,“0”表示false。
我应该重复一遍,如果子串实际上是某种类型的代码,那么这些应该存储在一个单独的连接表中,每个代码和原始行有一行。
答案 1 :(得分:1)
SELECT count(*) FROM
(SELECT 'p2p3p4p9c5c6c7' AS a) AS string_table
INNER JOIN
(SELECT 'p6' AS b UNION ALL
SELECT 'p7' UNION ALL
SELECT 'p8' UNION ALL
SELECT 'p9') AS list_table
ON INSTR(string_table.a,list_table.b) > 0;