0
SELECT * FROM t WHERE c REGEXP '.*\(..\).*';

これはうまくいきませんでした。cに3 文字以上の文字列を含む多くの行が返されました()

4

3 に答える 3

1
SELECT * FROM t WHERE c LIKE '%(__)%'

SQLフィドルはこちら

于 2012-09-14T04:55:53.920 に答える
0

あなたの脱出はオフです。

http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp

MySQL は文字列で C エスケープ構文を使用するため (たとえば、"\n" で改行文字を表す)、REGEXP 文字列で使用するすべての "\" を二重にする必要があります。

使用する:

SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*';
于 2012-09-14T04:52:24.237 に答える
-1

このクエリをどのように実行していますか? (たとえば)PHPスクリプトで使用していて、次のように書いている場合:

$sql = "SELECT ... REGEXP '.*\(..\).*';";

次に、PHPインタープリターは実際にこれらのバックスラッシュを取り除き、実際のクエリを生成します

... REGEXP '.*(..).*';

これは、少なくとも 2 文字の任意のレコードです。これが正しく機能するためには、ダブルエスケープする必要があります:

$sql = "SELECT ... REGEXP '.*\\(..\\).*';";

PHP は各セットからバックスラッシュの 1 つを取り除き、2 番目のバックスラッシュを実際に mysql に残します。

于 2012-09-14T04:52:27.963 に答える