sql >> データベース >  >> RDS >> Oracle

Oracleを使用した部分文字列複数の一致がある場合は?

    REGEXP_SUBSTRを組み合わせて使用​​できます およびREGEXP_COUNT あなたの質問を解決するために:

    WITH test_data(input) AS
    (
      SELECT  '1.CABLE : THERMINAL 3X2X0.25MM FPCP PLUS UNITRONIC S9C000019651' FROM DUAL UNION ALL 
      SELECT  '2.Motor Protection Relay EMR-3MPO-2S9CB1-1 (was IQ1000II / MP 3000)' FROM DUAL UNION ALL
      SELECT  '3.GREASE : BEM 41-132 3KG CARTRIDGE KLUBERPLEX S9C00019171 (Order by KG''s required)' FROM DUAL UNION ALL
      SELECT  '4.DO NOT USE CARRIER SPIDEX ZK 38 98 SH. S9C00011593 (SUPERSEDE BY S9C10204555 - WIN0020775)' FROM DUAL
    )
    SELECT regexp_substr(td.input, 
                         'S9C[0-9]{8}( |$)', 
                         1, 
                         GREATEST(1, regexp_count(td.input, 'S9C[0-9]{8}( |$)')))
    FROM test_data td
    

    仕組みの簡単な説明は次のとおりです。

    1. REGEXP_COUNT ターゲットパターンの発生をカウントするため、後で最後の発生を取得できます。
    2. 結果をGREATESTでラップします REGEXP_SUBSTRでは0が無効であるため パラメータ。
    3. REGEXP_SUBSTRを呼び出します ターゲット文字列の最後のオカレンスを取得します。

    これが機能していることを示すDBFiddleです( DBFiddle




    1. Neo4j-Cypherを使用してMATCHでデータを選択する

    2. PostgreSQLでデータベースのスキーマをエクスポートするにはどうすればよいですか?

    3. OracleSQLのペアの左右の連続番号と識別子

    4. PythonでデータベースからCSVファイルを作成するにはどうすればよいですか?