web-dev-qa-db-ja.com

SQL-文字列が列の値の一部を含むかどうかを検索するクエリ

列の値の一部が文字列に含まれているかどうかを検索するクエリを作成しようとしています(列に文字列の一部が含まれているかどうかを検索するクエリと混同しないでください)。たとえば、テーブルにABC、XYZという値の列があるとします。検索文字列ABCDEFGを指定した場合、ABCを含む行を表示したいと思います。検索文字列がXYZDSDSの場合、値XYZの行が表示されます。

7
user2354254

答えは「LIKEを使用する」でしょう。

ドキュメントを参照してください: https://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

あなたはWHERE 'string' LIKE CONCAT(column , '%')を行うことができます

したがって、クエリは次のようになります。

select * from t1 where 'ABCDEFG' LIKE CONCAT(column1,'%');

文字列のどこかに一致させる必要がある場合:

select * from t1 where 'ABCDEFG' LIKE CONCAT('%',column1,'%');

ここでは、それがフィドルで動作しているのを見ることができます: http://sqlfiddle.com/#!9/d1596/4

18
Turophile
Select * from table where @param like '%' + col + '%'
4
Aheho

最初に、物事のリストを列に格納しているように見えます。これは、データベースに値を格納するための間違ったアプローチです。エンティティと値ごとに1行のジャンクションテーブルが必要です。つまり、例ではABCXYZの行が別々になっています。 SQLには、リストを格納するための優れたデータ構造があります。 「文字列」ではなく「テーブル」と呼ばれます。

そのような形式で立ち往生していて、MySQLを使用している場合は、役立つ関数があります。

where find_in_set('ABC', col)

MySQLは、コンマ区切りの文字列を「セット」として扱い、この機能を提供します。ただし、この関数はインデックスを使用できないため、特に効率的ではありません。代わりにジャンクションテーブルを使用する必要があることを私は述べましたか

3
Gordon Linoff