我需要计算列的不同元素,但我必须忽略字符串的一部分。
示例:我有一个包含值的列:
+-----------+
| col1 |
+-----------+
| xxx-xx-1 |
+-----------+
| xxx-xx-2 |
+-----------+
| yyy-yy-1 |
+-----------+
| zz-zz-z-1 |
+-----------+
| zz-zz-z-2 |
+-----------+
如果我做SELECT COUNT(DISTINCT col1) FROM mytable
它将返回5,但我想得到3.(我需要忽略这些数字)
有没有办法使用正则表达式来忽略从字符串末尾到它找到的第一个连字符的所有内容?
我需要忽略字符串的末尾,直到找到第一个连字符,因为大小可能会有所不同。
我希望大家都明白这个问题,谢谢大家!
答案 0 :(得分:3)
MySQL不支持子串操作的正则表达式。但您可以使用substring_index()
:
SELECT COUNT(DISTINCT substring_index(reverse(col1), '-', 1) )
FROM mytable;
表达式substring_index(reverse(col1), '-', 1)
将返回到最后一个连字符的所有内容(因为reverse()
)。这会以相反的顺序计算不同的值,但这不会影响结果。