正規表現全体が単一引用符で囲まれている、引用符で囲まれた文字列に指定された、RLIKE
またはその必要がある文字列。REGEXP
あなたが持っているのは、ビット単位の OR 演算子|
である で区切られた 2 つの二重引用符で囲まれた文字列です。
これにより、式全体が として評価され、それがドメインが一致0
する理由です。aaa@domain0.com
# The unquoted | evaluates this to zero:
mysql> SELECT "string" | "string";
+---------------------+
| "string" | "string" |
+---------------------+
| 0 |
+---------------------+
# And zero matches domain0.com
mysql> SELECT 'domain0.com' RLIKE '0';
+-------------------------+
| 'domain0.com' RLIKE '0' |
+-------------------------+
| 1 |
+-------------------------+
RLIKE
代わりに、単一引用符で囲まれた文字列を使用し、. をバックスラッシュでエスケープする必要があります.
。^$
部分文字列が一致しないように、アンカーも追加しています。
WHERE SUBSTRING_INDEX(table1.email, "@", -1) RLIKE '^test1\.com$|^test2\.com$'
と表現することもできます'^(test1\.com|test2\.com)$'
。秘訣は、|
優先順位が非常に低いため、一致させたい可能性のあるすべての文字列に対して両端が固定されていることを確認する必要があることです。
ただし、単にドメインのリストを一致させようとしている場合は、それを使用する方がはるかに簡単なIN ()
ので、単にそれらをリストすることができます:
WHERE SUBSTRING_INDEX(table1.email, "@", -1) IN ('test1.com', 'test2.com', 'test4.org')