现有数据库包含字段调用“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
有些回答/评论显示对这个问题的一般误解,所以我澄清了这个问题。
答案 0 :(得分:1)
基于MySQL的string functions和Regular 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'
"*"
替换为""
==> '***'
对于大量记录来说,这将是缓慢和精简的,但它会让你在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。