2016-04-18 12 views
-1

正確に一致させる必要がある特定の「勝者コード」を含む文字列がありますが、データベースには「勝者コード」内にスペースと余分な文字が含まれています。私が 'like operator'を使用すると、一致する基準のみが返されます。 أ4ب3ج10oracleに空白を含むか空白の文字列をlikeまたはregexを使用して検索します

スペースで

レコード - - أ4ب3ج10私はそれがcode.Pleaseが受賞コード

私のクエリや詳細の下を見つける勝者が含まれている場合、すべてのレコードを返すことができる1簡略化されたクエリを使用したいです

余分な文字を持つレコード - (أ(4)ب(3)ج(10

マイクエリ - SELECT COLUMN_NAME, FROM TABLE_NAME WHERE ((COLUMN_NAME LIKE '%أ4%ب3%ج10%') or(COLUMN_NAME LIKE '%أ 4%ب 3%ج 10%'))

上記のクエリは、そのよう空間データととせずに返します。基準に合致する。

おかげ

答えて

0

私が正しくあなたの必要性を理解していれば、あなたは試すことがあります。

with test(str) as (
    select '10X3Y4Z' from dual union all 
    select '10 X 3 Y 4 Z' from dual union all 
    select '(10)X(3)Y(4)Z' from dual union all 
    select '[email protected] Z' from dual union all 
    select '10 @ X3Y4Z' from dual) 
select str 
from test 
where regexp_instr(str, '10[ |\)]{0,1}X[ |\(]{0,1}3[ |\)]{0,1}Y[ |\(]{0,1}4[ |\)]{0,1}Z') != 0 

これは数字が囲まれている場合でも、あなたの「勝者コード」(私は私のテストを簡素化するために別の文字を使用)と一致します'()'または単一のスペースで区切ります。 これはよりコンパクトな方法で書き直すことができますが、私はこの形式が十分明確であると信じています。空白または括弧と一致するように、0または1回の出現で[ |\)]{0,1}のような正規表現を使用します。

関連する問題