0

このように1つのフィールドに複数のIDがあります

field_name
+----------+
12345|34456|43564

今私が望んでいたのは、単一の数字でも完全に一致する場合に行を取得することなので、少し検索してこれを見つけてクエリで使用しましたが、失敗しました

SELECT field_name FROM tbl_name WHERE field_name REGEXP '[[:<:]]34456[[:>:]]';

だから私はこれにバックスラッシュを使用しましたが、うまくいきました。

SELECT field_name FROM tbl_name WHERE field_name REGEXP '[[:<:]]34456\[[:>:]]';

それは完璧ですか、それともどこか間違っていますか?完全一致が必要です。34456 を探しているのは望ましくありません。34457 がそこにあり、それが必要な場合は、一致が必要ですが、ここでEXACTは使用できませんWHERE

4

1 に答える 1

2

まあ、そのようなIDを保存する場合、「完璧」な解決策はありません:)

FIND_IN_SETMySQL には、このタイプのタスクに役立つと呼ばれる関数がありますが、リストがコンマで区切られていることを前提としています。したがって、その関数を使用するには、パイプをコンマに置き換える必要があります。

このようなものが動作するはずです:

SELECT field_name 
FROM tbl_name 
WHERE find_in_set('34456',replace(field_name,'|',',')) > 0;
于 2013-01-15T17:55:17.597 に答える