web-dev-qa-db-ja.com

MySQL SELECTクエリ文字列の一致

通常、SELECTを使用してデータベースを照会する場合、特定の検索文字列に一致するレコードを検索するのが一般的です。

例えば:

SELECT * FROM customers WHERE name LIKE '%Bob Smith%';

このクエリは、「Bob Smith」が名前フィールドのどこかに表示されているすべてのレコードを提供します。

私がやりたいことは反対です。

名前フィールドに「Bob Smith」が含まれるすべてのレコードを検索する代わりに、名前フィールドが「Robert Bob Smith III、PhD。」、クエリへの文字列引数にあるすべてのレコードを検索します。

29
JR Lawhorne

LIKEを好転させるだけ

SELECT * FROM customers
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%',name,'%')
41

次のような正規表現を使用できます。

SELECT * FROM pet WHERE name REGEXP 'Bob|Smith'; 
10

また使用できます

SELECT * FROM customers WHERE name LIKE "%Bob Smith%";

二重引用符に注意してください

1

上記のクエリで、たとえば次のような特殊文字を使用して検索している場合:'__'または '()'すべてのデータを取得するよりも、

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))

V_NAME

ラム(gblに行った)

ラムジ

Ramu_Karan(blrに行った)

シッド・カラン

ABC%^

xy123

abc

7行が選択されました。

出力:

Ramu_Karan(blrに行った)

シッド・カラン

0
Rakesh