0

あなたの提案と支援をありがとうmathguy。あなたが提供した例は、問題のほぼ完全な説明です。そうは言っても、この問題を説明するためにあなたのテキストを使用および編集しました。

18656、16380、16424 の形式のカンマ区切りの数字を含む文字列を受け取りました (これを param1 と呼びます)。文字列にはコンマと数字のみが含まれます。mytable には、18656.01.02、10.02.02、16380.02.03、16424.05.66、16424.55.23.14 などの値を持つ t という名前の列があります。param1 のすべてのコンマ区切りの数字に一致するすべての行を選択したいと考えています。ここで、列 t の最初の数値コンポーネントは 18656、16380、16424 のようになります。この場合、regexp_substr を使用する方法はありますか。

param1 = 18656、16380、16424 の場合、次のように動作します。

select * from mytable where t.mycolumn IN
    (
    (SELECT regexp_substr(:param1,'[^,]+', 1, level) as NUMLIST
    FROM DUAL
     CONNECT BY regexp_substr(:param1, '[^,]+', 1, level) IS NOT NULL)
    );

t.mycolumn = 18656.00.01, 16380.09.34, 16424.023.8 からデータを検索する場合のワイルドカードの使用方法 検索条件として LIKE を使用できますか? 可能であれば、例を提供してください。明らかに、以下は機能しませんが、解決策を見つけたいと思っています。

  select * from mytable where t.mycolumn LIKE
    (
    (SELECT regexp_substr(:param1||'%','[^,]+', 1, level) as NUMLIST
    FROM DUAL
     CONNECT BY regexp_substr(:param1||'%', '[^,]+', 1, level) IS NOT NULL)
    );
4

1 に答える 1

0

仮定:

次のような値を含むmytableという名前の列を持つ名前のテーブルがあります。t

SELECT * FROM mytable;

T              |
---------------|
18656.01.02    |
10.02.02       |
16380.02.03    |
16424.05.66    |
16424.55.23.14 |

パラメータとして受け取った文字列には、18656、16380、16424 の形式のコンマ区切りの数字が含まれています。文字列には、コンマと数字のみが含まれています。この文字列は、次のようなクエリを使用して個々の行に解析されます。

SELECT regexp_substr(param1,'[^,]+', 1, level) as NUMLIST
FROM ( 
   select '18656,16380,16424' as param1 FROM DUAL
) 
CONNECT BY regexp_substr(param1, '[^,]+', 1, level) IS NOT NULL
;

NUMLIST |
--------|
18656   |
16380   |
16424   |

要件

検索条件として LIKE を使用できますか? 可能であれば、例を提供してください。

LIKE キーワードは、JOIN ... ON 句の条件として以下で使用されます。

SELECT * FROM mytable
WHERE t IN (
   SELECT t 
   FROM mytable m
   JOIN (
            SELECT regexp_substr(param1,'[^,]+', 1, level) as NUMLIST
            FROM ( 
               select '18656,16380,16424' as param1 FROM DUAL
            ) 
            CONNECT BY regexp_substr(param1, '[^,]+', 1, level) IS NOT NULL
   ) x
   ON m.t LIKE '%' || x.NUMLIST || '%'
 )

T              |
---------------|
18656.01.02    |
16380.02.03    |
16424.05.66    |
16424.55.23.14 |
于 2017-01-07T06:26:13.410 に答える