表に次のデータがあります。
+----------------------+----------------------------------------------------------+--------------+
| subscriber_fields_id | name | field_type |
+----------------------+----------------------------------------------------------+--------------+
| 143 | Peshawar/Islamabad/Lahore/Swat/Mardan/Karachi | Job Location |
| 146 | Karachi | Job Location |
| 147 | Lahore and Karachi | Job Location |
| 149 | Karachi, Mirpur Khas, Sukkur, Layyah, Gilgit, Charsaddah | Job Location |
| 152 | Islamabad or Lahore | Job Location |
| 155 | Islamabad | Job Location |
| 157 | 7 Districts of Sindh and Karachi | Job Location |
+----------------------+----------------------------------------------------------+--------------+
私の質問は:
select * from subscriberfields
where name like '%Khairpur,Islamabad,Karachi%';
結果:
+----------------------+-----------------------------------------------+--------------+
| subscriber_fields_id | name | field_type |
+----------------------+-----------------------------------------------+--------------+
| 143 | Peshawar/Islamabad/Lahore/Swat/Mardan/Karachi | Job Location |
| 152 | Islamabad or Lahore | Job Location |
| 155 | Islamabad | Job Location |
+----------------------+-----------------------------------------------+--------------+
名前にイスラマバード、ハイルプル、カラチが含まれるすべての行が返されるはずですが、そうではありません。
適切な解決策については、 データベース設計を正規化する 、またはそれを除いて 全文検索 のいずれかを検討してください。
手元の問題をすばやく解決するには、 正規表現の一致(~
) または3つの単純な LIKE
式を使用します。
SELECT *
FROM subscriberfields
WHERE name ~ '(Khairpur|Islamabad|Karachi)';
または:
...
WHERE (name LIKE '%Khairpur%' OR
name LIKE '%Islamabad%' OR
name LIKE '%Karachi%')
または、大文字と小文字を区別しない照合には~*
またはILIKE
を使用します。
別の答えがそれを示唆したので:neveruse SIMILAR TO
:
以下のようにSIMILAR TO
を使用してみてください。
SELECT * FROM subscriberfields
WHERE name SIMILAR TO '%(Khairpur|Islamabad|Karachi)%';
また、データベースの正規化についても読む必要があります。あなたのデザインは間違いなく改善される可能性があり、改善されるべきです。
あなたはこれを使うことができます:
select * from subscriberfields
where name like any(array['%Khairpur%','%Islamabad%','%Karachi%']);
https://postgres.cz/wiki/PostgreSQL_SQL_Tricks#LIKE_to_list_of_patterns