我在mysql表中有一些列,它们将人的名字存储为字符串的组合,并为唯一性存储增加的数字,因此我将名称存储为:
Patrick, Patrick1, Patrick2, ..... Patrick10, David, David2, .... David5
如何只检索字母名称本身,没有数字?假设我想按不同的名称进行分组,并按组计数,因此我得到的结果类似于以下内容。
name | frequency
-----------------
Patrick | 10
David | 5
答案 0 :(得分:1)
解决方案就是这样:(它看起来不太好,但它有效)
SELECT
TRIM(TRAILING '0' FROM
TRIM(TRAILING '1' FROM
TRIM(TRAILING '2' FROM
TRIM(TRAILING '3' FROM
-- ...
TRIM(TRAILING '8' FROM
TRIM(TRAILING '9' FROM name)))))) AS name
FROM your_table
然后您可以从结果中选择GROUP BY:
SELECT name, count(*) AS frequency FROM (
-- previous select
) AS t
GROUP BY name
答案 1 :(得分:0)
我会稍微考虑一下,但我建议如果你需要一个有区别的数字,你可以将它保存在不同的栏目中。这样,你就不会遇到这种困难。
答案 2 :(得分:0)
您可以使用udf。
然后尝试下面的内容
select REGEX_REPLACE(name, [0-9], '') as Name, Count(Name)
from tableName
Group by Name
答案 3 :(得分:0)
您可以像这样“链接”替换命令(这将删除查询中的数字0,1,2)。您可以将其扩展为其他数字,但我不知道这是否会在大型数据集上表现得非常好:
从用户中选择替换(替换(替换(名称,“0”,“”),“1”,“”),“2”,“”);
我也会想,做Brian建议会更好。