3

部分的な文字列を照合する必要がありますが、全文索引をオンにできないため、containsを使用できません。2つの文字列間の距離を決定するためのレーベンシュタインの関数を見てきましたが、あいまい一致は探していませんが、列内のすべての文字が文字列に存在します。

つまり、渡される文字列がAB_SYS_20120430.TXTのようなものである場合、AB_SYSを含むすべての列で一致させたいと思います。同様の述語は私をそこに導きません。.NETに相当する機能が本当に必要ですが、前述のように、全文索引をオンにすることはオンにするオプションではありません。他に考えられる回避策があるかどうかを確認したいと思います。

4

2 に答える 2

5

LIKE機能をお探しですか?
http://www.w3schools.com/sql/sql_like.asp

... WHERE MyColumn LIKE '%AB_SYS%'

それは最適ではないかもしれませんが、それはあなたの質問に答えているようです...あなたがさらに最適化できる左側または右側からのみ検索できる場合。

これは、機能的にはString.Contains
http://msdn.microsoft.com/en-us/library/dy85x1sa.aspxに似ています。

編集:入力テキストを「関連する」サブストリングにどのように解析しますか?

編集:同じ条件を逆に検索するLIKEには、部分的な列から完全なリテラルに、ワイルドカード文字を追加するだけです。

... WHERE 'AB_SYS_20120430.TXT' LIKE '%' + MyColumn + '%'

編集:あなたはそれを機能させることができないことを提案しました。スキーマを追加する場合は、質問をしてください。さらにサポートできますが、これを検討してください。

MyTable
というテーブルがあります。そのテーブルにはMyColumnという列があります
。そのテーブルの一部の行には、MyColumnにデータ「AB_SYS」があります。

パラメータ'AB_SYS_20120430.TXT'を指定すると、一致するすべての行を返します。

CREATE PROCEDURE MyTestProcedure 
    @pFullNameString nvarchar(4000) = '' -- parameter passed in, like AB_SYS_20120430.TXT
AS
BEGIN
    SELECT
        *
    FROM
        MyTable
    WHERE
        @pFullNameString LIKE '%' + MyTable.[MyColumn] + '%'
END
GO
于 2012-04-30T15:25:30.447 に答える
2

CHARINDEXを使用できます

WHERE  CHARINDEX(StringToCheckFor, StringToCheckIn) > 0
于 2012-04-30T15:45:49.343 に答える