0

長い文字列内の 2 つの文字列を一致させる必要がある MySQL クエリを実行していますが、それを機能させることができません。これは私が試したものです。

SELECT * FROM mytable WHERE (mycol REGEXP '/~20\|2~/' AND mycol REGEXP '/~14\|1~/')

文字列はこんな感じ

~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~

これらの部分文字列の両方を含むすべての行を選択したい

~20|2~ AND ~14|1~

私は何を間違っていますか?

4

2 に答える 2

1

これを確認してください。これは、両方の文字列を持つ行のみを選択しています。

  • 編集:

元の正規表現が機能しなかった理由:

Because MySQL uses the C escape syntax in strings (for example, “\n” to represent the newline character), you must double any “\” that you use in your REGEXP strings.

クエリ:

SELECT * FROM vendor 
WHERE (vname REGEXP '~20\\|2~' 
AND vname REGEXP '~14\\|1~')
;

クエリ: あなたのものとは異なるテーブル/サンプル データを使用していることに注意してください。ただし、データ行をコピーし、少し変更して正しいregex.

サンプルデータ:

| VID |                                              VNAME |
------------------------------------------------------------
|   1 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
|   2 |               ~20|2~14|1397|1|0:0:0:0||~17|1~18|1~ |
|   3 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
|   4 |       ~20|2~1|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |

クエリ:

SELECT * FROM vendor 
WHERE (vname REGEXP '~20\[|]2~' 
AND vname REGEXP '~14\[|]1~')
;

結果:

| VID |                                              VNAME |
------------------------------------------------------------
|   1 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
|   3 | ~20|2~14|1~15|1~16|1~1|1397|1|0:0:0:0||~17|1~18|1~ |
于 2013-01-12T08:31:14.857 に答える
0

これを試しましたか?

SELECT * FROM mytable WHERE (mycol REGEXP '~20\|2~' AND mycol REGEXP '~14\|1~')

SQL フィドル

于 2013-01-12T07:28:01.197 に答える