我有一个包含2列的mysql表-列1包含一个字符串值,列2包含该字符串值出现的次数。
我正在尝试查找字符串abc.X.def,其中字符串的开头是“ abc。”,然后是一个或多个字符,然后是字符串“ .def”。 “ .def”之后可能会有更多字符。
如何找到这样的字符串,然后添加出现的这些字符串并显示结果?
例如,如果我有
abc.111.def23 1
abc.111.def 2
abc.22.def444 1
abc.111.def 1
然后我会得到
abc.111.def23 1
abc.111.def 3
abc.22.def444 1
谢谢。
最佳答案
我认为您可以使用LIKE
和SUM
:
SELECT StringValue, SUM(InstanceSubCount) AS InstanceCount
FROM ValueInstanceSubcounts
WHERE StringValue LIKE 'abc.%.def%'
GROUP BY StringValue
注意
GROUP BY
子句,因为您的表在StringValue上似乎没有主键或唯一键。另外,请注意'def'之后的第二个%
,因为您的字符串值不是以'.def'结尾,但实际上可以有一些数字。为此,如果您的自由字符始终是十进制数字([0-9]
),则可以尝试使用以下WHERE
子句之一代替:WHERE StringValue REGEXP '^abc\.\d+\.def\d*$'
WHERE StringValue REGEXP '^abc\.[0-9]+\.def[0-9]*$'
它们是等效的,并且在点/句点之间需要一些数字(这是加号的作用),并在“ def”之后允许数字(即星号的作用)。句点本身必须以反斜杠转义,否则它们代表任何字符。
^
和$
告诉REGEXP
从头到尾匹配整个字符串。最后,\d
是十进制数字的缩写,也可以由字符范围[0-9]
表示。