2017-08-08 11 views
0

私は列の別個の要素を数える必要がありますが、文字列の一部を無視する必要があります。SQLで正規表現を使用することはできますか?

例:私は値を持つ列を持っている:

+-----------+ 
| 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

[MySQL:文字列を抽出するためにREGEXを使用する(REGEXを選択)](https://stackoverflow.com/questions/4021507/mysql-use-regex-to-extract-string-select-regex)の可能な複製 – BugHunterUK

答えて

3

MySQLは部分文字列演算の正規表現を容易にサポートしません。しかし、あなたはsubstring_index()を使用することができます。

SELECT COUNT(DISTINCT substring_index(reverse(col1), '-', 1)) 
FROM mytable; 

表現substring_index(reverse(col1), '-', 1)が(理由reverse()の)最後のハイフンにすべてを返します。これは、異なる値を逆順に数えますが、結果には影響しません。

関連する問題