我有一个包含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


谢谢。

最佳答案

我认为您可以使用LIKESUM

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]表示。

10-04 21:34
查看更多