1

これは私が取り組んでいることの非常に単純化されたバージョンですが、うまくいけば私の主張が伝わるでしょう。

次のようなmysqlテーブルがあります。

CREATE TABLE Table1(
  ID INT AUTO_INCREMENT,
  Val VARCHAR(50),
     PRIMARY KEY (id)
  );
INSERT INTO Table1 (Val) SELECT "Reference.Int('ABCD')";
INSERT INTO Table1 (Val) SELECT "Reference.Str('EFG','ABC')";
INSERT INTO Table1 (Val) SELECT "Reference.Int('HIJ','EFG','ABC')";

私が取り組んでいるメソッドは、括弧内の値の 1 つをパラメーターとして受け取ります。たとえば、「EFG」です。この値を含むテーブル内のすべての行を取得することは可能ですか? 私は次のようなことをすると知っています:

SELECT * from Table1 where Val LIKE "%EFG%" 

私は正しい値を取得できます。私の問題は、たとえば値の1つが次のようになる可能性があるため、より具体的にする必要があることです。

 Reference.Int('ABCD') + EFGX/200

また

EFG + anything else

「Reference.Str()」という部分も何らかの形で含める必要があることを意味します。括弧内にあるものは特に気にしません。唯一の関心事は、受け取ったパラメーターの値を含むものを取得することです。

これが REGEXP を使用して解決できるかどうか疑問に思っていましたが、これに関する私の知識はせいぜい弱いものです。

どんな助けでも大歓迎です。

4

4 に答える 4

1

これはSQLクエリには適していないと思います。文字列で見つかったトークンと親レコードへの参照を格納する2番目のテーブルを作成するのがおそらく最善です。

だからあなたは次のようなことをすることができます

select record_id from tokens where token_val = 'EFG';

その後

select * from records where record_id in (*results from pervious query)

基本的には、クエリごとにオンザフライで解析を試みるのではなく、レコードごとに1回、事前にハードワークを実行するという考え方です。

于 2013-02-11T19:50:44.600 に答える
1

正規表現を使用できますが、必要はありません。検索語で値を引用符で囲むだけです。

select ...
where val like '%\'EFG\'%'
于 2013-02-11T19:57:49.340 に答える
1

これを試して:

SELECT * FROM Table1 WHERE Val LIKE "Reference.Str(%'EFG'%"

SQL フィドルのデモ

于 2013-02-11T19:55:54.273 に答える
1

SUBSTRING_INDEXを使用して、括弧内の文字列の一部のみを取得できると思います。

SUBSTRING_INDEX(SUBSTRING_INDEX(Val, "(", -1), ")", 1)

そして、FIND_IN_SETを使用できます:

SELECT *
FROM Table1
WHERE
  FIND_IN_SET(
    '\'EFG\'',
    SUBSTRING_INDEX(SUBSTRING_INDEX(Val, "(", -1), ")", 1)
  )

こちら を参照してください

于 2013-02-11T20:19:11.707 に答える