0

表に出現する単語を検索したい。私のテーブルには、80 列が利用可能です。すべての列に対して like 演算子を繰り返さずに単語を検索する可能性はありますか? ネットで調べてみたのですが、解決できません。前もって感謝します。

4

2 に答える 2

4

これはほぼ確実に、スキーマに重大な設計上の問題があり、さらに正規化を検討する必要があることを意味します。

80 列を超える値を検索することが理にかなっている場合は、そうです、スキーマを再考してください。

理論的には、次のことができます。

SELECT *
FROM the_table
WHERE the_table::text LIKE '%word%';

タプル全体をテキスト形式に変換してから検索します。ただし、これは実際にはひどい考えです。必要なテキスト列だけでなく、すべての列が含まれ、行リテラルに引用符やその他の書式が追加され、単語がどの列に表示されたかはわかりません.

通常、より健全なアプローチは、複数列の検索をサポートするデータベース内全文検索を使用することです。すべての列を繰り返す必要があるため、80 を超える列は厄介ですが、それが唯一の正しい方法です。面倒な場合は、おそらくスキーマの設計を修正する必要があります。

于 2013-07-15T07:11:38.503 に答える
-2

これを試して、

以下のクエリは、Columnwise に基づいています。

select COUNT(*) from dbo.TableNAme
where PatIndex('searchword',ColumnName) > 0
于 2013-07-15T07:12:16.567 に答える