通常、SELECTを使用してデータベースを照会する場合、特定の検索文字列に一致するレコードを検索するのが一般的です。
例えば:
SELECT * FROM customers WHERE name LIKE '%Bob Smith%';
このクエリは、「Bob Smith」が名前フィールドのどこかに表示されているすべてのレコードを提供します。
私がやりたいことは反対です。
名前フィールドに「Bob Smith」が含まれるすべてのレコードを検索する代わりに、名前フィールドが「Robert Bob Smith III、PhD。」、クエリへの文字列引数にあるすべてのレコードを検索します。
LIKEを好転させるだけ
SELECT * FROM customers
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%',name,'%')
次のような正規表現を使用できます。
SELECT * FROM pet WHERE name REGEXP 'Bob|Smith';
また使用できます
SELECT * FROM customers WHERE name LIKE "%Bob Smith%";
二重引用符に注意してください
上記のクエリで、たとえば次のような特殊文字を使用して検索している場合:'__'または '()'すべてのデータを取得するよりも、
SQL> select * from test_brck where NVL(UPPER(v_name)、1)LIKE nvl(UPPER( '%' ||&v_name || '%')、NVL(UPPER(v_name)、1));
V_nameの値を入力: '_'
old 2:where NVL(UPPER(v_name)、1)LIKE nvl(UPPER( '%' ||&v_name || '%')、NVL(UPPER(v_name)、1))
新規2:ここでNVL(UPPER(v_name)、1)LIKE nvl(UPPER( '%' || '_' || '%')、NVL(UPPER(v_name)、1))
ラム(gblに行った)
ラムジ
Ramu_Karan(blrに行った)
シッド・カラン
ABC%^
xy123
abc
7行が選択されました。
出力:
Ramu_Karan(blrに行った)
シッド・カラン