如何计算MySQL中给定字符串的匹配数?

时间:2013-02-28 21:57:47

标签: mysql regex

现有数据库包含字段调用“dependent_ages”,某些示例数据类似于“1,2,5”或“1yo和3mo”或“4mo”。

要求是将这样的字符串转换为整数,这是由“,”或“和”分隔的子字符串的数量。更准确地说,分隔符可以描述为正则表达式“,| \ sand \ s”。所以对于上面的例子,转换后的整数是3,2和1.基本上,我对存在多少匹配感兴趣,而不是那些匹配的。因此,无论个人价值是“14yo”还是“4mo”,它都将被视为1.

问题是找到一个可以执行此操作的MySQL表达式,例如

SELECT REGEXMATCHES(dependent_ages) as dependent_no ...

UPADTE

有些回答/评论显示对这个问题的一般误解,所以我澄清了这个问题。

3 个答案:

答案 0 :(得分:1)

基于MySQL的string functionsRegular Expressions的文档,我认为除了使用正则表达式比较返回true(1)或false(0)之外,我们不可能做任何事情。您无法返回比赛,也无法返回比赛数。我认为您甚至不能使用正则表达式来执行替换。

您可以使用Stored Program

  • 从:'son: 10yr * daughter: 5yr * son:6mo'
  • 开始
  • 首次通过:使用"*" ==>替换字符串中的所有"" 'son: 10yr daughter: 5yr son:6mo'
  • 第二次通过:用"*"替换数字序列(因此"15"变为"*")==> 'son: *yr daughter: *yr son:*mo'
  • 第三次通过:将非"*"替换为"" ==> '***'
  • 第四遍:返回字符串(3)的长度。

对于大量记录来说,这将是缓慢和精简的,但它会让你在MySQL中。您可能还想考虑使用其他工具下载行,进行处理,然后上传结果。

答案 1 :(得分:0)

如果我理解正确,这就是你所需要的。

select count(*) from `table` where `dependent_ages` rlike 'HERE-REGEX'

答案 2 :(得分:0)

我认为你需要这样的东西:

SELECT
  col,
  CASE WHEN COALESCE(col, '')='' THEN 0
  ELSE
    length(col)-length(replace(col, ',', ''))+
    (length(col)-length(replace(col, ' and ', ''))) DIV 5
    +1
  END
FROM
  yourtable

请参阅小提琴here