LIKE 句、CONTAINS 句、FREETEXT 句を駆使した高度な検索テクニック
SQL Server データベースで文字列を検索する方法
LIKE 句は、パターンやワイルドカードを使用して文字列を検索する最も基本的な方法です。
SELECT *
FROM Customers
WHERE CustomerName LIKE '%田中%'
このクエリは、名前が "田中" を含むすべての顧客レコードを返します。 ワイルドカード %
は、0 文字以上の一致を表します。
CHARINDEX 関数は、特定の文字列が別の文字列内に初めて出現する位置を返します。
SELECT CustomerID, CustomerName
FROM Customers
WHERE CHARINDEX('田中', CustomerName) > 0
このクエリは、名前の中に "田中" が含まれるすべての顧客の ID と名前を返します。
CONTAINS 句は、フルテキスト インデックスを使用して、自然言語クエリを実行するために使用されます。 フルテキスト インデックスは、単語のリストと、それらの単語が含まれるドキュメントの場所を格納する特別なインデックスです。
SELECT *
FROM Customers
WHERE CONTAINS(CustomerName, '東京 AND 田中')
このクエリは、名前が "東京" と "田中" の両方を含むすべての顧客レコードを返します。
FREETEXT 句は、CONTAINS 句に似ていますが、より柔軟な検索が可能です。 フレーズ検索、あいまい検索、シノニム検索などをサポートしています。
SELECT *
FROM Customers
WHERE FREETEXT(CustomerName, '東京 OR 田中')
その他のヒント
- 大文字と小文字を区別する検索を行うには、COLLATE 修飾子を使用できます。
- 部分一致ではなく完全一致を検索するには、= 演算子を使用できます。
- 複数の条件で検索するには、AND および OR 演算子を使用できます。
LIKE 句
-- 名前が "田中%" で始まる顧客を検索
SELECT *
FROM Customers
WHERE CustomerName LIKE '田中%'
-- 住所に "東京" が含まれる顧客を検索
SELECT *
FROM Customers
WHERE Address LIKE '%東京%'
-- 電話番号にハイフンが含まれる顧客を検索
SELECT *
FROM Customers
WHERE PhoneNumber LIKE '%-%-%-%'
CHARINDEX 関数
-- 名前の中に "田中" が含まれる顧客を検索
SELECT CustomerID, CustomerName
FROM Customers
WHERE CHARINDEX('田中', CustomerName) > 0
-- 商品説明に "特価" が含まれる商品を検索
SELECT ProductID, ProductName, ProductDescription
FROM Products
WHERE CHARINDEX('特価', ProductDescription) > 0
CONTAINS 句
-- 名前が "東京" と "田中" の両方を含む顧客を検索
SELECT *
FROM Customers
WHERE CONTAINS(CustomerName, '東京 AND 田中')
-- 件名に "重要" または "緊急" が含まれるメールを検索
SELECT *
FROM Emails
WHERE CONTAINS(Subject, '重要 OR 緊急')
FREETEXT 句
-- 名前が "東京" または "田中" のいずれかを含む顧客を検索
SELECT *
FROM Customers
WHERE FREETEXT(CustomerName, '東京 OR 田中')
-- 商品説明に "カメラ" が含まれる商品を検索
SELECT *
FROM Products
WHERE FREETEXT(ProductDescription, 'カメラ')
SELECT *
FROM Customers
WHERE CustomerName LIKE '田中%' COLLATE Japanese_CI_AS
SELECT *
FROM Customers
WHERE CustomerName = '田中'
SELECT *
FROM Customers
WHERE CustomerName LIKE '田中%' AND City = '東京'
これらのサンプルコードはあくまでも一例であり、状況に応じてさまざまな方法で変更できます。 詳細については、SQL Server のドキュメントを参照してください。
SQL Server データベースで文字列を検索するその他の方法
SOUNDEX 関数は、綴りが似ている文字列を一致させるために使用されます。 これは、発音に基づいて文字列を符号化するアルゴリズムに基づいています。
-- 苗字が "Smith" または "Smythe" に似た顧客を検索
SELECT *
FROM Customers
WHERE SOUNDEX(LastName) = SOUNDEX('Smith')
DIFFERENCE 関数は、2 つの文字列の違いを計算するために使用されます。 これを使用して、2 つの文字列がどれだけ似ているかを判断できます。
-- 商品名と検索語句の類似度を計算
SELECT ProductID, ProductName,
DIFFERENCE(ProductName, 'search term') AS Similarity
FROM Products
FULLTEXTCOLUMN 型は、テキスト列にフルテキスト インデックスを自動的に作成する特殊なデータ型です。 これにより、CONTAINS 句や FREETEXT 句を使用した高速で効率的な検索が可能になります。
-- 列 "CustomerComments" にフルテキスト インデックスを作成
ALTER TABLE Customers
ADD CustomerCommentsFullText FULLTEXT (CustomerComments);
-- "CustomerComments" 列に含まれる "サポート" に関連する顧客を検索
SELECT *
FROM Customers
WHERE CONTAINS(CustomerCommentsFullText, 'サポート')
SQL Server ラーニング パス
Microsoft は、SQL Server でのテキスト検索に関する包括的なラーニング パスを提供しています。 このラーニング パスでは、LIKE 句、CONTAINS 句、FREETEXT 句、その他のテクニックを使用した検索方法を段階的に学習できます。
これらの追加の方法により、SQL Server データベースでより高度で複雑な文字列検索を実行できるようになります。
sql-server function search